这个话题很简单,但我可能有点混淆了。网络字节顺序是大端序。Java 默认使用大端序,例如 class 文件的情况。我的 Windows 机器使用的是 Intel 处理器,它是小端序的,而 Windows 本身也使用小端序。因此,如果我使用
问题的另一部分也与在机器上工作有关。
java.nio.ByteBuffer.allocateDirect()
,那么默认的字节顺序是小端序(因为操作系统和/或处理器),但是如果我想将这些数据发送到网络上,在从 ByteBuffer 读取数据时,我需要使用 ByteBuffer.order(ByteOrder.BIG_ENDIAN)
吗?另外,当从 Channel 读取数据到 ByteBuffer 时,我需要反过来做吗?在使用 java.io 包时,我几乎忽略了这个问题。问题的另一部分也与在机器上工作有关。
- 我是否应该始终注意主机的字节顺序?因此,无论使用什么本地数据存储格式都可以在此机器环境中进行,但是在发送到网络时将数据转换为 BIG_ENDIAN。
- 就字节顺序而言,对于默认文件格式,例如在 Windows 上,它始终是小端序。但是,现在在具有大端序的 MAC 或 Linux 上使用相同的文件时,我应该使用字节顺序标记(BOM)保存它吗?