是否可以在Java中更改数组的类型?

时间:2012-08-10 00:23:53

标签: java

  

可能重复:
  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];
}

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

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)

没有。数组的类型是不变的。

不,如果是,但是或者可能是。