[英]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()
繼續讀取所需的無符號字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.