Java和endianness

时间:2011-12-08 17:23:08

标签: java cross-platform endianness

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

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:3)

如果要在ByteBuffer上映射较大类型的缓冲区,则可以使用ByteOrder值指定字节序。较旧的核心库假定网络顺序。

来自ByteBuffer

  

访问二进制数据

     

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

ByteOrder可以访问您正在处理的平台的native order

将其与较旧的DataInput进行比较,这对于与本地本地服务的互操作无用:

  

读取四个输入字节并返回一个int值。设a-d为读取的第一到第四个字节。返回的值是:

(((a & 0xff) << 24) | ((b & 0xff) << 16) |
 ((c & 0xff) << 8) | (d & 0xff))

答案 2 :(得分:2)

类文件格式本身是big-endian(或者更确切地说,类文件中的所有多字节数据都以这种方式存储):

Class file format

  

所有16位,32位和64位数量分别通过读取两个,四个和八个连续的8位字节构成。多字节数据项总是以big-endian顺序存储,其中高字节首先出现。

但正如其他人所说,作为一个实际的考虑,你几乎不必担心这一点。