这个话题很简单,但我可能在这里有点困惑。网络字节顺序是 Big-Endian。默认情况下,Java 也使用 Big-endian(与类文件一样)。我的 windows 机器使用 Intel 处理器,它是 Little-Endian,Windows 本身也使用 Little-Endian。所以,如果我使用 a java.nio.ByteBuffer.allocateDirect()
,那么默认的 Endianness 是 Little-Endian (因为操作系统和/或处理器),但是,如果我想在网络上发送这些数据,在从 读取数据时 ByteBuffer
,我需要使用ByteBuffer.order(ByteOrder.BIG_ENDIAN)
吗?Channel
此外,从 a到 a读取数据时我是否必须做相反的事情ByteBuffer
?使用java.io
包时我几乎忽略了它
问题的另一部分也与机器本身的工作有关。
- 我是否应该始终注意主机的字节顺序?因此,无论使用何种本地数据存储格式,在本机环境下都可以,但是,在发送到网络时将数据转换为 BIG_ENDIAN。
- 就字节序而言,对于默认文件格式,比如在 Windows 上,它总是小字节序。但是,现在在 MAC 或带有 Big-Endian 的 Linux 上使用相同的文件,我应该使用字节顺序标记 (BOM) 保存它吗?