我有一個關於在Java或C/C++中讀取文件的問題。您通常可以獲得文件中當前位置的偏移值。 這個偏移有多強大?假設文件沒有改變,當然如果我將流定位在這個偏移量上,我會如果使用C/C++,將通過Java讀取相同的行? 我想是的,但我想知道如果我錯過了什麼?我想要做的是使某種索引返回特定文件中的偏移值?這種工作是否可以將這種偏移綁定到某個API或甚至x位體系結構上?對於幾種編程語言,文件指針的偏移是否可靠/可靠?
問候,
我有一個關於在Java或C/C++中讀取文件的問題。您通常可以獲得文件中當前位置的偏移值。 這個偏移有多強大?假設文件沒有改變,當然如果我將流定位在這個偏移量上,我會如果使用C/C++,將通過Java讀取相同的行? 我想是的,但我想知道如果我錯過了什麼?我想要做的是使某種索引返回特定文件中的偏移值?這種工作是否可以將這種偏移綁定到某個API或甚至x位體系結構上?對於幾種編程語言,文件指針的偏移是否可靠/可靠?
問候,
的在一個給定的文件的給定字節的偏移量將是對(至少)與文件的POSIX/POSIX狀模型的任何系統可靠100%。因此,同樣的問題會在Java和C++中給你相同的字節。但是,這取決於您正確使用各自語言的I/O API;即瞭解他們。
有一件事情,能有點棘手的是,當你使用一些「二進制I/O」在C++計劃,需要治療的對象(或結構)的字節和讀/寫的字節數組。如果你這樣做,你就會遇到C/C++對象的字節級表示與平臺相關的問題。例如,你可以遇到大端與小端的問題。這並不會改變偏移量......但這可能意味着由於表示不匹配,「東西」會變形。
最好的辦法是使用不依賴於讀取或寫入文件的平臺的文件表示;即不要這樣做。
爲了進一步理解'std :: istream'和'C++'中派生類型的定位是如何工作的,請查看'std :: basic_istream :: seekg()'和'std :: basic_istream :: tellg()'。 –
thokra