2011-07-28 238 views

回答

5

調用指定者()後,你可以通過結果到Apache共享toPrimitive方法:

http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/ArrayUtils.html#toPrimitive(java.lang.Byte[])>

+0

爲此,您仍然必須事先在列表中使用'toArray()'。 – Marcelo

+1

該方法將一個數組作爲參數。不是''ArrayList''。它需要將ArrayList轉換爲數組,然後將Byte數組轉換爲byte數組。不確定這是否是進行轉換的最有效方式。 –

+0

@Vivien我同意這可能不是最有效的,但可能最簡單的寫法。如果表現是一個問題,我會用邁克爾或維維恩的答案。 – JustinKSU

2
byte[] data = new byte[list.size()]; 
for (int i = 0; i < data.length; i++) { 
    data[i] = (byte) list.get(i); 
} 

請注意,這可能需要一些時間,由於該Byte對象需要被轉換爲byte值的事實。

此外,如果您的列表包含null值,則會拋出NullPointerExcpetion

8
byte[] result = new byte[list.size()]; 
for(int i = 0; i < list.size(); i++) { 
    result[i] = list.get(i).byteValue(); 
} 

呀,Java的集合是惱人的,當涉及到基本類型。

+0

大小()中缺少括號 – nick

4

沒有想到內置的方法。然而,編碼一升上來是非常簡單的:

public static byte[] toByteArray(List<Byte> in) { 
    final int n = in.size(); 
    byte ret[] = new byte[n]; 
    for (int i = 0; i < n; i++) { 
     ret[i] = in.get(i); 
    } 
    return ret; 
} 

注意,這會給你一個NullPointerException如果innull或者如果它包含nulls。如果你需要不同的行爲,如何改變這個功能是非常明顯的。

相關問題