有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

Possible Duplicate:
byte array to Int Array

我有一个很大的字节数组,我能不能把它解释为一个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];
}

但是,与其一个字节一个字节地复制整个数组(因为数组太大,需要花费很长时间),不如从已经存在的数组中读取整数


共 (3) 个答案

  1. # 1 楼答案

    不可以。数组的类型是不变的

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

  2. # 2 楼答案

    使用此代码:

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

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

  3. # 3 楼答案

    问:可以在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引入的