Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RandomAccessFile未正确读取整数_Java - Fatal编程技术网

Java RandomAccessFile未正确读取整数

Java RandomAccessFile未正确读取整数,java,Java,我试图在Java中使用RandomAccessFile读取二进制文件 问题是,它没有返回正确的值。如果您在打开我的文件的情况下查看此十六进制车间的sceencap: 如果将前4个字节读取为int32,您将看到它们是82 然而,当我调用以下命令时,我的程序将其读取为1375731712: raf.readInt(); 在我看来,我的程序似乎在向后读取这些字节(与endian相关的东西?) 我如何正确地读取它们,以及Hex Workshop如何知道使用哪一个endian?Java将int作为大端

我试图在Java中使用RandomAccessFile读取二进制文件

问题是,它没有返回正确的值。如果您在打开我的文件的情况下查看此十六进制车间的sceencap:

如果将前4个字节读取为int32,您将看到它们是82

然而,当我调用以下命令时,我的程序将其读取为1375731712:

raf.readInt();
在我看来,我的程序似乎在向后读取这些字节(与endian相关的东西?)


我如何正确地读取它们,以及Hex Workshop如何知道使用哪一个endian?

Java将int作为大端读取,但它作为小端写入文件

1375731712 -> 01010010 00000000 00000000 00000000 (big-endian) 82 -> 00000000 00000000 00000000 01010010 (big-endian) 1375731712 -> 00000000 00000000 00000000 01010010 (little-endian) 82 -> 01010010 00000000 00000000 00000000 (little-endian) 1375731712->01010010 00000000(大端) 82->00000000000000000001010010(大端) 1375731712->00000000000000000001010010(小端) 82->0101001000000000000(小端点)
维基百科:。

根据那个条目,如果我读对了,我的这个文件就是Big-Endian,对吗?我把它们当作小恩迪安来读。为什么会正确阅读它们?我怎样才能用Java正确地阅读它们?@Michelreau是的,对不起。把那两个人弄错了。我对endianness的直觉不起作用。@文件本身没有endianness;它是你的调试器,读起来像小endian。Little endian也是LSB,或最低有效字节(第一个)@fge文件中int的编码方式有endian。它不是一个调试器,而是一个十六进制查看器。文件中有一些隐含的尾端,意思是
52000000
应该是82,而不是1375731712(我知道这一点,因为这个32位整数是屏幕上的偏移位置)。有趣的是,使用我现在正在转换为java的.NET应用程序,我可以正确地读取文件,同时也可以毫无问题地读取一些小的endian文件。这怎么可能?