【发布时间】:2013-10-23 13:15:09
【问题描述】:
这个话题很简单,但我可能在这里有点困惑。网络字节顺序是 Big-Endian。默认情况下,Java 也使用 Big-endian(与类文件一样)。我的 windows 机器使用 Intel 处理器,它是 Little-Endian,Windows 本身也使用 Little-Endian。所以,如果我使用java.nio.ByteBuffer.allocateDirect(),那么默认的字节序是小字节序(因为操作系统和/或处理器),但是,如果我想在网络上发送这些数据,在从ByteBuffer 读取数据,我需要使用ByteBuffer.order(ByteOrder.BIG_ENDIAN) 吗?此外,在将数据从Channel 读取到ByteBuffer 时,我是否必须执行相反的操作?使用java.io包时我几乎忽略了它
问题的另一部分也与机器本身的工作有关。
- 是否应该始终注意主机的字节顺序?所以,无论使用什么本地数据存储格式,在本机环境下都可以,但是,在发送到网络时,将数据转换为BIG_ENDIAN。
- 就字节顺序而言,对于默认文件格式(例如在 Windows 上),它始终为 Little-Endian。但是,现在在 MAC 或带有 Big-Endian 的 Linux 上使用相同的文件,我应该使用字节顺序标记 (BOM) 保存它吗?
【问题讨论】:
-
你的最后一个问题没有意义。字符集与字节序无关。
-
已编辑以消除 UTF-8 混淆。你能请。还可以看到我的 cmets 到 @TwoThe。谢谢。
标签: java encoding network-programming endianness