Java ByteBuffer.wrap(byte[]),如果 byte[] 以小端顺序排列,字节序会发生什么变化
Java ByteBuffer.wrap(byte[]), what happens to endianness if byte[] is ordered in little endian
我试着总体上理解 ByteBuffer.wrap(byte[])
甚至 ByteBuffer
:
如果我有一个字节数组,其中包含一些不同长度和不同类型的值(例如 int16
s,int32
s,UTF-16 字符串都在 LITTLE ENDIAN 字节顺序和一些 ASCII 字符串),然后用 ByteBuffer
包装它并通过网络发送,比方说通过 AsynchronousSocketChannel
,我的字节按什么顺序发送?
是否以 BIG ENDIAN 发送它们?它是将字节数组视为一个大数据并将其顺序更改为大端还是它感知字节顺序并仅添加具有大端字节顺序的新元素?
背景是我正在处理一个以小端顺序发送和接收字节的客户端,它似乎无法处理我通过网络发送的数据。
如果数据在包装缓冲区内采用小端,则它保持小端顺序。如果你添加整数值,那么它取决于缓冲区的顺序,默认到大端或"network order"。
缓冲区 instance 的字节顺序仅在使用各种 get
和 set
方法读取或写入原始值时才重要,例如 getInt
和 putInt
(有或没有位置)。如果字节顺序更改,缓冲区和已存储在其中的数据将保持不变。
基本上,当从缓冲区中检索数据时,首先检索(并发送)具有最低索引的字节,然后是下一个,等等。通常将其视为最左边的字节。换句话说,当从缓冲区中检索并发送字节时,位置总是上升,直到达到限制。
我试着总体上理解 ByteBuffer.wrap(byte[])
甚至 ByteBuffer
:
如果我有一个字节数组,其中包含一些不同长度和不同类型的值(例如 int16
s,int32
s,UTF-16 字符串都在 LITTLE ENDIAN 字节顺序和一些 ASCII 字符串),然后用 ByteBuffer
包装它并通过网络发送,比方说通过 AsynchronousSocketChannel
,我的字节按什么顺序发送?
是否以 BIG ENDIAN 发送它们?它是将字节数组视为一个大数据并将其顺序更改为大端还是它感知字节顺序并仅添加具有大端字节顺序的新元素?
背景是我正在处理一个以小端顺序发送和接收字节的客户端,它似乎无法处理我通过网络发送的数据。
如果数据在包装缓冲区内采用小端,则它保持小端顺序。如果你添加整数值,那么它取决于缓冲区的顺序,默认到大端或"network order"。
缓冲区 instance 的字节顺序仅在使用各种 get
和 set
方法读取或写入原始值时才重要,例如 getInt
和 putInt
(有或没有位置)。如果字节顺序更改,缓冲区和已存储在其中的数据将保持不变。
基本上,当从缓冲区中检索数据时,首先检索(并发送)具有最低索引的字节,然后是下一个,等等。通常将其视为最左边的字节。换句话说,当从缓冲区中检索并发送字节时,位置总是上升,直到达到限制。