java - RandomAccessFile 字节顺序问题

标签 java stream endianness randomaccessfile

我必须从二进制文件中读取字节、int 和 long 数据大小的数据。我使用 RandomAccessFile 的方法 readIntreadLongreadByte 读取它。问题是系统的字节序 (Windows 8.1) 和文件的字节序不同。例如这个号码enter image description here文件中实际上是数字 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/

相关文章:

java - 在线程内使用 System.exit() 后显示主线程的输出

java - 添加到集合时遇到问题

c++ - 检查流是否以换行符结尾

java - 输入流上的正则表达式

c - 确定 C 语言机器体系结构的正确方法

c# - 使用 C# 在 Little 或 Big Endian 中写入/读取二进制数据的最佳方法?

java - 停止 <任务 :scheduler> tasks

java - 我应该如何在 Android 应用程序中保存应用程序数据?

c++ - 大小端问题

java - groovy 中的静态属性拦截