2012-08-10 86 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

相關問題