Вопрос

Какой порядковый номер Java использует в своей виртуальной машине?Я помню, что где-то читал, что это зависит от физической машины, на которой оно запущено, а затем в других местах, где я читал, что это всегда, по-моему, большой порядковый номер.Что из этого правильно?

Это было полезно?

Решение

Многобайтовые данные в class файлы хранятся в формате big-endian.

От Спецификация виртуальной машины Java, Java SE 7 Edition, Глава 4:Тот самый class Формат файла:

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

Кроме того, операнд в инструкции байт-кода также имеет порядковый номер, если он занимает несколько байт.

От Спецификация виртуальной машины Java, Java SE 7 Edition, Раздел 2.11:Краткое описание набора инструкций:

Если размер операнда превышает один байт , то он сохраняется в формате big-endian order-сначала старший байт.Для Например, 16-разрядный индекс без знака в локальных переменных хранится в виде двух байтов без знака, byte1 и byte2, такой , что его значение равно (byte1 << 8) | byte2.

Так что да, я думаю, можно сказать, что виртуальная машина Java использует big-endian.

Другие советы

Фактические рабочие данные, хранящиеся в работающем процессе, почти наверняка будут соответствовать порядку байтов исполняемого процесса.Обычно форматы файлов (включая файлы классов) располагаются в сетевом порядке (с прямым порядком байтов).

Обычно сложно сказать, что делает машина, поскольку она абстрагируется виртуальной машиной.Вы не можете использовать short[] к byte[] как вы можете в C и C++. java.nio.ByteOrder.nativeOrder() должен дать вам основную последовательность байтов.Сопоставление порядка байтов полезно при использовании небайтовых буферов NIO.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top