可能重复:
byte array to Int Array
我有一个很大的字节数组,我能以某种方式将其解释为一个整数数组,这样每个条目只是原始字节的四个吗?
我的意思是这样的:
for (int i = 0; i < byteArray.length; i += 4) {
intArray[i / 4] = byteArray[i] << 24 + byteArray[i+1] << 16 + byteArray[i+2] << 8 + byteArray[i+3];
}
但不是逐字节地复制整个数组,因为数组很大,所以只需读取已存在的数组。
答案 0 :(得分:4)
使用此代码:
IntBuffer intarray = ByteBuffer.wrap(bytearray).order(ByteOrder.BIG_ENDIAN).asIntBuffer();
intarray.get(100);
只需要很少的额外堆空间。实际上,它包装字节数组并创建一个int数组视图。显着更快,在我的PC中缓冲区大小为INT_MAX需要几纳秒。
答案 1 :(得分:1)
问:是否可以在Java中更改数组的类型?
答:一般来说,“不”。您必须逐项复制/转换。
在这个具体案例中:是的,当然。只需使用asIntBuffer()。例如:
import java.nio.*;
import java.nio.IntBuffer;
import java.nio.ByteBuffer;
public class MyClass {
public static void main(String[] args) throws Exception {
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
int[] array = new int[] { 1, 2, 3, 4 };
IntBuffer IntBuf = byteBuffer.asIntBuffer();
IntBuf.put(array);
...
请注意,java.nio引入了这些转换(以及相关的“翻转”,“换行”,更改字节顺序的能力等)。
答案 2 :(得分:1)
没有。数组的类型是不变的。
不,如果是,但是或者可能是。