簡體   English   中英

如何使用 Java RandomAccessFile 從文件中正確讀取字節?

[英]How to read byte correctly from file using Java RandomAccessFile?

我有一個字節為 88(十進制為 136)的二進制文件。

我正在使用 Java 的 RandomAccessFile class 和“讀取”方法通過預定義的緩沖區讀取此字節。 我也嘗試了“readUnsignedByte()”,但得到了與下面相同的問題。

RandomAccessFile randomAccessFile = new RandomAccessFile(inputFile, "r");
byte[] headerBuffer = new byte[32];
randomAccessFile.read(headerBuffer);

上面的代碼給我 -120 表示 88,而不是 136。

我意識到高位或任何設置,但我仍然需要能夠讀取文件並獲得 88 或 136。

問題是這個字節是二進制文件的偏移量,我可以在其中找到第一條記錄,因此負數不起作用。

將不勝感激的建議。

謝謝,

只需執行b & 0xFF即可將其轉換為正 integer。

您可以使用Byte.toUnsignedInt方法以“無符號”方式將byte轉換為int

jshell> byte b = (byte) 0x88;
b ==> -120
jshell> Byte.toUnsignedInt(b);
$57 ==> 136

該操作與b & 0xff相同,但不調用幻數或有關位運算符的知識。

批量讀取問題

您用於一次讀取多個字節的方法read(byte[])實際上讀取了一個帶符號的字節,如readByte() 因此,您是對的,第一位代表符號,因此將由 Java 解釋,可能導致負數。

使用偏移量並讀取無符號

隨機訪問的好處是使用seek(long)跳轉到文件中的位置/偏移量。 因此,如果您知道該記錄指針字節的確切 position,您可以跳轉到那里並使用readUnsignedByte()繼續讀取所需的無符號字節。

也可以看看

如何在 Java 中將文件讀取為無符號字節?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM