Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java与endianness_Java_Cross Platform_Endianness - Fatal编程技术网

Java与endianness

Java与endianness,java,cross-platform,endianness,Java,Cross Platform,Endianness,java如何处理endianness?如果您要将应用程序从一个小端号移动到一个大端号,或者反之亦然。 类的数据成员或属性是如何受到影响的?Java虚拟机将这一考虑抽象出来,这样,只要您完全在Java中工作,就不必担心它。你必须考虑字节顺序的唯一原因是如果你与非java进程或类似的东西通信。 编辑:为了字眼清晰而进行编辑如果要将较大类型的缓冲区映射到一个缓冲区,则可以使用字节顺序值指定尾数。旧的核心库采用网络顺序 从ByteBuffer的开始: 访问二进制数据 此类定义了用于读取和写入除boole

java如何处理endianness?如果您要将应用程序从一个小端号移动到一个大端号,或者反之亦然。
类的数据成员或属性是如何受到影响的?

Java虚拟机将这一考虑抽象出来,这样,只要您完全在Java中工作,就不必担心它。你必须考虑字节顺序的唯一原因是如果你与非java进程或类似的东西通信。
编辑:为了字眼清晰而进行编辑

如果要将较大类型的缓冲区映射到一个缓冲区,则可以使用
字节顺序
值指定尾数。旧的核心库采用网络顺序

从ByteBuffer的
开始:

访问二进制数据

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

并且,
ByteOrder
提供对您正在使用的平台的访问

将其与旧版本进行比较,旧版本对与本地本机服务的互操作不起作用:

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

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

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

所有16位、32位和64位量都是通过分别读取两个、四个和八个连续的8位字节来构造的。多字节数据项总是以大端顺序存储,其中高位字节排在第一位


但正如其他人所提到的,作为一个实际考虑因素,您几乎不必担心这一点。

Endianness仅在您通过网络接口或磁盘读取/写入原始数据,或通过IPC或管道或文件接收数据,或在您读取或写入数据时才起作用。@OliCharlesworth另一方面不是java。必须进行否决表决。当你处理一个非java应用程序以不同的结尾写出的二进制文件时,还有一个主要的时间需要担心endianness。Endience是一个词吗?:-)@user949300你说的是真的,尽管我认为这属于“与非java进程通信”我不知道如何“取消否决权”,但我很容易,所以我只是对它进行了否决“意味着网络内容,而不是从文件中读取。如果他明确提到文件,这会更清楚。顺便说一句,有些文件标准定义了endiness,因此即使Java编写了文件,endiness也可能不是Java标准。按位和原语
long
加上文本例如
0xffffff00000000l
是否安全?