我必须从二进制文件中读取字节、int 和 long 数据大小的数据。我使用 RandomAccessFile
的方法 readInt
、readLong
、readByte
读取它。问题是系统的字节序
(Windows 8.1) 和文件的字节序不同。例如这个号码文件中实际上是数字 2
,但从系统中读取为 33554432
。
如何解决此问题并能够使用 RandomAccessFile
的方法读取数据 block ?
最佳答案
the problem is that the endianness of the system ... and the endianness of the file are different.
没有。他们是一样的。看看数据。最低有效字节位于开头。这就是小端字节序,即英特尔字节序。 (不是“Windows 字节顺序”,据我所知,除了特定平台之外,Windows 字节顺序不存在)。
问题是文件和系统的字节序是小字节序,但是 RandomAccessFile
是大端字节序。
在 Java 中解决这个问题的方法是通过 NIO 和 ByteBuffer
,使用 native 字节顺序而不是默认值。
关于java - RandomAccessFile 字节顺序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32006549/