Java和endianness

Jav*_*Ser 4 java cross-platform endianness

java如何处理字节序?如果您将应用程序从小端移动到大端,或反之亦然.数据成员或类的属性如何受到影响?

non*_*unk 8

Java虚拟机将这一考虑抽象化,只要您完全在Java中工作,就不必担心它.您应该考虑字节顺序的唯一原因是您正在与非Java进程或类似的进程通信.

编辑:为了清晰的措辞而编辑

  • 必须投反对票。当您处理由具有不同字节序的非 Java 应用程序写出的二进制文件时,还有另一个主要时间需要担心字节序。结束是一个词吗?:-) (2认同)
  • 既然答案已经修改,你应该取消投票. (2认同)

Mik*_*uel 4

如果您将较大类型的缓冲区映射到 a 上ByteBuffer,则可以使用这些ByteOrder值指定字节顺序。较旧的核心库采用网络顺序。

ByteBuffer

访问二进制数据

此类定义了用于读取和写入除布尔值之外的所有其他基本类型的值的方法。根据缓冲区的当前字节顺序将原始值转换为字节序列(或从字节序列转换为字节序列),可以通过 order 方法检索和修改原始值。特定的字节顺序由 ByteOrder 类的实例表示。字节缓冲区的初始顺序始终是 BIG_ENDIAN。

并提供对您正在使用的平台的本机顺序ByteOrder的访问。

将其与旧版本进行比较,旧版本DataInput对于与本地本机服务的互操作没有用处:

读取四个输入字节并返回一个 int 值。令 ad 为读取的第一个到第四个字节。返回的值为:

(((a & 0xff) << 24) | ((b & 0xff) << 16) |
 ((c & 0xff) << 8) | (d & 0xff))
Run Code Online (Sandbox Code Playgroud)