使用byte[]
转换为ByteBuffer.allocate(int_value).array()
时,整数必须在Java中有多大才能长达4个字节?
我问这个因为我在我正在进行的游戏中使用Integers for Entity Ids并且生成4字节ID比使用字节填充每个byte[]
要便宜得多保持0x00
。
答案 0 :(得分: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)
,并获得用给定int填充的4字节缓冲区,因为的大小是Java int
(32-比特,根据https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html),无论其值如何。
注意:你可能从错误的角度接近这个,顺便说一下。最好使用 big 缓冲区,为您提供连续的内存区域,并根据某些指标简单地对其进行细分,例如:对于4字节(int)单元,分配4 * totalInts然后,例如得到(4 * i)等,或者使用批量获取。
答案 1 :(得分:1)
Java中的整数(基元int
)应始终为4个字节,因此类型不是动态的。请参阅Primitive Data Types。
但是,如果您的目的只是创建一个空字节数组,那么只需创建它。因此在Java中不需要用零填充它,字节的默认值是0。
如果要确保字节数组的长度为4,则可以使用
ByteBuffer.allocate(4).putInt(int_value).array();