2012-08-10 85 views
1

可能重复:
byte array to Int Array是否有可能改变Java中的数组类型?

我有一个大阵列的字节,我可以以某种方式将其解释为整数的阵列,使得每个条目只是原始字节四个?

我的意思是这样的:

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

您肯定可以读取字节并将它们放入int变量中,并且它们会自动上转换为整数。然而,数组中的字节将会并且必须保持字节。 – 2012-08-10 00:28:05

+2

'ByteBuffer.wrap(byteArray).toIntBuffer()' – 2012-08-10 00:30:33

+2

@LiuYan刘研'asIntBuffer' – assylias 2012-08-10 00:34:46

回答

4

使用此代码:

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

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

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介绍。

+0

PS:波西米亚语是正确的。 *原始*数组不变。 asIntBuffer()和朋友只是*拷贝数组。根据需要进行转换。非常非常有效。 – paulsm4 2012-08-10 01:29:20

1

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

没有,如果是,但或可能的。

+0

你是绝对正确的:)我认为OP只是想知道是否有替代方案来复制和转换数组。而且,在这种情况下,有。 – paulsm4 2012-08-10 01:30:10

相关问题