1

可能重复:
字节数组到 Int 数组

我有一个大字节数组,我可以以某种方式将它解释为一个整数数组,这样每个条目只是原始字节的四个?

我的意思是这样的:

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];
}

但不是一个字节一个字节地复制整个数组,因为数组很大,所以只需从已经存在的数组中读取整数。

4

3 回答 3

4

使用此代码:

IntBuffer intarray = ByteBuffer.wrap(bytearray).order(ByteOrder.BIG_ENDIAN).asIntBuffer();
 intarray.get(100);

将占用很少的额外堆空间。实际上,它包装了字节数组并创建了一个 int 数组视图。明显更快,在我的电脑中,缓冲区大小为 INT_MAX 需要几纳秒。

于 2012-08-10T00:40:11.290 回答
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中引入的。

于 2012-08-10T00:36:07.597 回答
1

不,数组的类型是不变的。

不,如果是,但是是或也许是。

于 2012-08-10T01:03:52.723 回答