Ash*_*ley 3 java encoding network-programming endianness
这个话题很简单,但我可能会在这里混淆一下.网络字节顺序是Big-Endian.默认情况下,Java也使用Big-endian(就像类文件一样).我的Windows机器使用Intel处理器,Little-Endian和Windows本身也使用Little-Endian.所以,如果我使用a java.nio.ByteBuffer.allocateDirect(),那么默认的Endianness是Little-Endian(因为OS和/或处理器),但是,如果我想在网络上发送这些数据,在读取数据时 ByteBuffer,我是否需要使用ByteBuffer.order(ByteOrder.BIG_ENDIAN)?另外,在从a Channel到a 读取数据时,我是否必须反向ByteBuffer?使用java.io包时我几乎忽略了它
问题的另一部分也与机器本身的工作有关.
这个话题很简单,但我可能会在这里混淆一下.网络字节顺序是Big-Endian.默认情况下,Java也使用Big-endian(就像类文件一样).
对于类文件,DataOutputStream,DataInputStream,ObjectInputStream,ObjectOutputStream和java.nio.*,我可能已经遗漏了一些东西.
如果我使用java.nio.ByteBuffer.allocateDirect(),那么默认的Endianness是Little-Endian(因为操作系统和/或处理器)
不.'新创建的ByteBuffer的顺序总是大端的'.见Javadoc.
如果我想在网络上发送这些数据,在从ByteBuffer读取数据时,我是否需要使用ByteBuffer.order(ByteOrder.BIG_ENDIAN)?
它已经是.
另外,在将数据从通道读取到ByteBuffer时,我是否必须执行相反的操作?
它已经是.
我在使用java.io包时几乎忽略了它
DataInputStream和DataOutputStream使用big-endian.见Javadoc.
我是否应该始终了解主机的Endianness?
不是Java.
因此,无论使用何种本地数据存储格式,在本机环境中都可以,但在发送到网络时将数据转换为BIG_ENDIAN.
这已经发生在默认情况下.
就Endianness而言,对于默认文件格式,比如在Windows上,它总是Little-Endian.
不,不是.往上看.
但是,现在在MAC或具有Big-Endian的Linux上使用相同的文件,我应该使用字节顺序标记(BOM)保存吗?
往上看.不必要.
| 归档时间: |
|
| 查看次数: |
9607 次 |
| 最近记录: |