我在理解如何讀取和返回文件中某個偏移位置的值時遇到了一些麻煩。Java - 在給定偏移量處讀取字節
例如,我從我的十六進制編輯器得知偏移量是D768,值是32位。那麼如何讀取這個值並將其顯示在標籤中。
任何幫助都將不勝感激。
我在理解如何讀取和返回文件中某個偏移位置的值時遇到了一些麻煩。Java - 在給定偏移量處讀取字節
例如,我從我的十六進制編輯器得知偏移量是D768,值是32位。那麼如何讀取這個值並將其顯示在標籤中。
任何幫助都將不勝感激。
我認爲這是java.io.RandomAccessFile中你的新朋友:-)
當心下面的代碼,它沒有經過測試。
RandomAccessFile raf = new RandomAccessFile("foo.bin", "r");
raf.seek(0xd768);
int value = raf.read();
退房RandomAccessFile.skipBytes跳過直到抵消,該班可能會幫助你。
使用DataInputStream類。打開文件,並使用skipBytes(offset)
進行定位,然後致電readInt()
。這會給你一個從你使用的偏移量開始的32位。
(注意,這個假設整數文件中第一次代表中最顯著字節)。
這並不總是有效。跳過並不總是跳過偏移量的字節數。 (這就是爲什麼它返回實際跳過的字節數)。 – MTilsted 2012-03-17 13:26:57
@MTilsted - 然後你繼續跳過,直到你達到必要的字節數。在實踐中,我認爲如果偏移量超出文件末尾,你會發現'skipBytes'只會在文件**上「不起作用」**。 – 2012-03-18 02:35:20
使用skipBytes
到達給定位置。要讀取32位數字,如果值爲big-endian,則可以使用DataInputStream
。如果是小端,則需要手動將四個字節轉換爲int
:
int value = (int)bytes[0]
| ((int)bytes[1] << 8)
| ((int)bytes[2] << 16)
| ((int)bytes[3] << 24);
+1:我會使用readInt()(讀取32位int)而不是read()(讀取無符號字節) – 2012-03-17 12:17:34
乾杯,夥計們,這非常有幫助。我想我可以從這裏拿走它。再次感謝。 – Bagshot 2012-03-17 12:24:32