Насколько я понимаю вас, вы делаете неправильные предположения здесь. Нет никакого преобразования/усечения/расширения, выполненного с помощью 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) и т. д., или использовать массовое получение.
В Java, 'int' всегда 32 бита (4 байта), он не зависит от базовой платформы, как на C или C++. – Jesper
Обратите внимание, что аргумент ['.allocate (int)'] (https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#allocate (int)) не является значение, но количество байтов для распределения. Если вы хотите четыре байта, вы вызываете '.allocate (4)'. Это позволит хранить любой Java 'int'. – dimo414
Хорошо, похоже, я не понимал. – ThePixelPony