java如何处理字节序?如果您将应用程序从小端移动到大端,或反之亦然。 如何影响类的数据成员或属性?
答案 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(或者更确切地说,类文件中的所有多字节数据都以这种方式存储):
所有16位,32位和64位数量分别通过读取两个,四个和八个连续的8位字节构成。多字节数据项总是以big-endian顺序存储,其中高字节首先出现。
但正如其他人所说,作为一个实际的考虑,你几乎不必担心这一点。