2014-11-16 6 views
-2

Насколько велика Целое число должно быть на Java, определенно должно быть 4 байта при преобразовании в byte[] с использованием ByteBuffer.allocate(int_value).array()?Какой размер Целочисленный размер равен 4 байтам?

Я спрашиваю это потому, что я использую для типа Integer Entity идентификаторов в игре я работаю, и это гораздо дешевле генерировать 4 байт Идентификаторы, как в отличие от заполнения каждого byte[] с байта, которые держат значение 0x00.

+1

В Java, 'int' всегда 32 бита (4 байта), он не зависит от базовой платформы, как на C или C++. – Jesper

+1

Обратите внимание, что аргумент ['.allocate (int)'] (https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#allocate (int)) не является значение, но количество байтов для распределения. Если вы хотите четыре байта, вы вызываете '.allocate (4)'. Это позволит хранить любой Java 'int'. – dimo414

+0

Хорошо, похоже, я не понимал. – ThePixelPony

ответ

2

Насколько я понимаю вас, вы делаете неправильные предположения здесь. Нет никакого преобразования/усечения/расширения, выполненного с помощью allocate(), или array() - вы просто выделите количество байтов int_value и получите bytes[int_value] -размерный массив от array(), если array() поддерживается вообще. https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#allocate%28int%29

Чтобы сделать массив длиной 4 байта, просто используйте ByteBuffer.allocate(4), вот и все. Затем, если хотите, используйте putInt(somevalue), и вы получите 4-байтовый буфер, заполненный данным int, потому что - это размер Java int (32 бит, согласно https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html), независимо от его стоимости.

Примечание: вы, вероятно, приближаетесь к этому из-за неправильного угла, кстати. Лучше всего использовать буферы больших, предоставляя вам области непрерывной памяти и просто сегментируйте их на основе некоторой метрики, например. для 4-байтовых (int) ячеек выделяют 4 * totalInts, а затем, например, получить (4 * i) и т. д., или использовать массовое получение.

1

Целое число (примитив int) в Java всегда должно быть 4 байта, следовательно, тип не является динамическим. См. Primitive Data Types.

Однако, если ваша цель - создать пустой массив байтов, тогда просто создайте его. Там нет необходимости, чтобы заполнить его нулями, следовательно, в Java, то значение по умолчанию для байтов равно 0.

Если вы хотите, чтобы гарантировать, что массив имеет длину 4, вы можете использовать

ByteBuffer.allocate(4).putInt(int_value).array(); 
+0

Конечно, вы правы. Я отредактировал свой ответ, чтобы пояснить, что мой ответ посвящен примитивному int, а не объекту. – TobiasMende

+0

это просто, что в Java (AFAIR) «integer» является обычным способом вызова автобокса, в то время как «int» - это имя примитива; это источник некоторой путаницы, особенно для зеленых деревьев, и я указал на это исключительно по этой причине, так как ОП явно не хватало здесь нескольких основных отличий. – vaxquis

Смежные вопросы