use*_*857 2 java stream endianness randomaccessfile
我必须从二进制文件中读取字节,整数和长数据大小的数据。我读它RandomAccessFile的方法readInt,readLong,readByte。问题是系统(Windows 8.1)的尾数与文件的尾数不同。例如这个数字
文件中的数字实际上是数字2,但是从系统读取的33554432。
如何解决此问题,并能够使用RandomAccessFile的方法读取数据块 ?
问题是系统的字节序...与文件的字节序不同。
不,它们是相同的。看数据。最低有效字节在开头。那是little-endian,这是Intel的字节序。(不是 “ Windows字节序”,除了特定平台以外,不存在AFAIK)。
问题在于文件和系统的字节顺序为小字节序,但RandomAccessFile为大字节序。
在Java中解决此问题的方法是通过NIO和ByteBuffer使用本机字节顺序而不是默认字节顺序。