Java ByteBuffer.wrap (byte []), что происходит с порядком байтов, если byte [] упорядочен с прямым порядком байтов - PullRequest
1 голос
/ 17 января 2020

Я пытаюсь понять ByteBuffer.wrap(byte[]) или даже ByteBuffer в целом:

Если у меня есть байтовый массив, который содержит некоторые значения различной длины и разного типа (например, int16 s, int32 s, строки UTF-16 все в LITTLE ENDIAN порядке байтов и некоторых ASCII-строках, а также), затем оберните его ByteBuffer и отправьте по сети, скажем, через AsynchronousSocketChannel, в в каком порядке мои байты отправляются тогда?

Он отправляет их в BIG ENDIAN ? Рассматривает ли он байтовый массив как большие данные и изменяет его порядок на порядковый с большим порядком байтов, или он воспринимает порядок байтов и добавляет только новые элементы с байтовым порядком с большим порядком байтов?

Фон, с которым я имею дело клиент, который отправляет и получает байты в порядке с прямым порядком байтов, и кажется, что он не может работать с данными, которые я отправляю по сети.

1 Ответ

0 голосов
/ 17 января 2020

Если данные находятся в порядке с прямым порядком байтов в обернутом буфере, то они остаются в порядке с прямым порядком байтов. Если вы добавляете целочисленные значения, то это зависит от порядка буфера, который по умолчанию имеет значение с прямым порядком байтов или "сетевой порядок".

Порядок байтов в буфере экземпляр имеет значение только тогда, когда примитивные значения считываются или записываются с использованием различных методов get и set, таких как getInt и putInt (с положением или без него). Буфер и данные, уже сохраненные в нем, остаются неизменными, если порядок байтов изменяется.

В основном при извлечении данных из буфера сначала извлекается (и отправляется) байт с самым низким индексом, затем следующий, и др c. Обычно это считается самым левым байтом. Другими словами, позиция всегда повышается, когда байты извлекаются из буфера и отправляются, пока не будет достигнут предел.

...