小編典典
正如我所猜測的那樣,這是一個字節序問題,即您的二進制文件被寫為低字節序的整數(可能是因為您使用的是Intel或類似的CPU)。
但是,無論Java代碼運行在哪個CPU上,它都在讀取大端整數。
為了顯示該問題,以下代碼將讀取您的數據,并在字節序轉換之前和之后將整數顯示為十六進制數字。
import java.io.*;
class TestBinaryFileReading {
static public void main(String[] args) throws IOException {
DataInputStream data_in = new DataInputStream(
new BufferedInputStream(
new FileInputStream(new File("binary_file.dat"))));
while(true) {
try {
int t = data_in.readInt();//read 4 bytes
System.out.printf("%08X ",t);
// change endianness "manually":
t = (0x000000ff & (t>>24)) |
(0x0000ff00 & (t>> 8)) |
(0x00ff0000 & (t<< 8)) |
(0xff000000 & (t<<24));
System.out.printf("%08X",t);
System.out.println();
}
catch (java.io.EOFException eof) {
break;
}
}
data_in.close();
}
}
如果您不想“手動”更改字節序,請參閱以下問題的答案:將小字節序
文件轉換為大字節序
2020-11-01