2011-07-28 50 views
16

thể trùng lặp:
How to convert an ArrayList containing Integers to primitive int array?Chuyển đổi ArrayList <Byte> thành một byte []

Làm thế nào để chuyển đổi một ArrayList<Byte> thành một byte[]?

ArrayList.toArray() cho tôi quay lại Byte[].

+8

ArrayList là cách hiệu quả nhất để lưu trữ Byte. Nếu bạn không biết có bao nhiêu byte sẽ sử dụng ByteArrayOutputStream với write() và toByteArray(), đừng sử dụng List nếu bạn có thể tránh được nó. –

Trả lời

5

Sau khi gọi toArray(), bạn có thể vượt qua kết quả vào phương pháp Apache Commons toPrimitive:

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

+0

Đối với điều này, bạn sẽ vẫn phải sử dụng 'toArray()' trong danh sách trước. – Marcelo

+1

Phương thức này lấy một mảng làm tham số. Không phải là một '' ArrayList''. Nó sẽ yêu cầu chuyển đổi từ '' ArrayList'' thành một mảng, và sau đó chuyển đổi mảng '' Byte'' thành mảng '' byte''. Không chắc chắn đó sẽ là cách hiệu quả nhất để thực hiện chuyển đổi. –

+0

@Vivien Tôi đồng ý rằng nó có thể không hiệu quả nhất, nhưng có lẽ là cách đơn giản nhất để viết. Nếu hiệu suất là một mối quan tâm, tôi sẽ sử dụng câu trả lời của Michael hoặc Vivien. – JustinKSU

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

Xin lưu ý rằng điều này có thể mất một thời gian do thực tế rằng Byte đối tượng cần phải được chuyển đổi sang byte giá trị.

Ngoài ra, nếu danh sách của bạn chứa null giá trị, điều này sẽ ném một số NullPointerExcpetion.

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

Yeah, các bộ sưu tập của Java là gây phiền nhiễu khi nói đến các kiểu dữ liệu .

+0

thiếu dấu ngoặc đơn ở kích thước() – nick

4

Không có phương pháp tích hợp nào. Tuy nhiên, mã hóa lên khá đơn giản:

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; 
} 

Lưu ý rằng điều này sẽ cung cấp cho bạn một NullPointerException nếu innull hoặc nếu nó có chứa nulls. Nó khá rõ ràng làm thế nào để thay đổi chức năng này nếu bạn cần hành vi khác nhau.

Các vấn đề liên quan