Java и порядковый номер - PullRequest
       15

Java и порядковый номер

4 голосов
/ 08 декабря 2011

Как Java заботится о порядке байтов?В случае, если вы перемещаете ваше приложение с прямым порядком байтов на другое или наоборот.Как затрагиваются члены данных или свойства класса?

Ответы [ 3 ]

8 голосов
/ 08 декабря 2011

Виртуальная машина Java абстрагирует это соображение, так что вам не нужно беспокоиться об этом, пока вы полностью работаете в Java.Единственная причина, по которой вам следует учитывать порядок следования байтов, заключается в том, что вы общаетесь с не-Java-процессом или чем-то подобным.

Редактировать: отредактировано для ясности формулировки

3 голосов
/ 08 декабря 2011

Если вы отображаете буфер большего типа на ByteBuffer, то вы можете указать порядковый номер, используя значения ByteOrder. Старые библиотеки ядра принимают сетевой порядок.

С ByteBuffer:

Доступ к двоичным данным

Этот класс определяет методы для чтения и записи значений всех других примитивных типов, кроме логических. Примитивные значения преобразуются в (или из) последовательностей байтов в соответствии с текущим порядком байтов буфера, который может быть получен и изменен с помощью методов порядка. Определенные порядки байтов представлены экземплярами класса ByteOrder. Начальный порядок байтового буфера всегда BIG_ENDIAN.

и ByteOrder предоставляют доступ к собственному порядку для платформы, на которой вы работаете.

Сравните это со старым DataInput, которое не полезно для взаимодействия с локальными нативными службами:

Считывает четыре входных байта и возвращает значение типа int. Пусть a-d будет прочитанным байтом с первого по четвертый. Возвращаемое значение:

(((a & 0xff) << 24) | ((b & 0xff) << 16) |
 ((c & 0xff) << 8) | (d & 0xff))
2 голосов
/ 08 декабря 2011

Сам по себе формат файла класса имеет порядок байтов (точнее, все многобайтовые данные в файле класса хранятся таким образом):

Формат файла класса

Все 16-битные, 32-битные и 64-битные величины строятся путем считывания в два, четыре и восемь последовательных 8-битных байтов соответственно. Многобайтовые элементы данных всегда хранятся в порядке с прямым порядком байтов, где старшие байты идут первыми.

Но, как уже упоминали другие, в качестве практического соображения вам почти никогда не придется беспокоиться об этом.

...