2010-07-04 25 views
26

Próba rozwiązania problemu, który powinien być prosty. Mam listę bajtów, chcę przekonwertować ją na końcu funkcji na tablicę bajtów.Java: konwertuj listę bajtów na tablicę bajtów

final List<Byte> pdu = new ArrayList<Byte>(); 
.... 
return pdu.toArray(new byte[pdu.size()]);; 

Kompilator nie lubi składni na moim toArray. Jak to naprawić?

Odpowiedz

40

Kompilator go nie lubi, ponieważ byte[] nie jest Byte[].

Co możesz zrobić, to użyć commons-lang „s ArrayUtils.toPrimitive(wrapperCollection):

Byte[] bytes = pdu.toArray(new Byte[pdu.size()]); 
return ArrayUtils.toPrimitive(bytes); 

Jeśli nie można używać commons-lang, wystarczy pętli za pośrednictwem tablicy i wypełnić kolejną tablicę typu byte[] z wartościami (będą one być automatycznie rozpakowywany)

Jeśli możesz żyć z Byte[] zamiast byte[] - zostaw to w ten sposób.

+0

Dzięki wielkie! :) Nie widziałem wcześniej ArrayUtils.toPrimitive, całkiem użyteczne. –

+1

+1 za te rzeczy z commons-lang –

+1

Nie podoba mi się rozwiązanie ArrayUtils. Musi być gotowe rozwiązanie dla Java 8. – JohnMerlino

18

Użyj metody Guava dla metody: Guava - metoda.

List<Byte> list = ... 
byte[] bytes = Bytes.toArray(list); 

Dzięki temu nie trzeba wykonywać pośredniej konwersji tablic, że ekwiwalent Commons Lang wymaga od ciebie.

1

spróbować również Dollar (check this revision):

import static com.humaorie.dollar.Dollar.* 
... 

List<Byte> pdu = ...; 
byte[] bytes = $(pdu).convert().toByteArray(); 
Powiązane problemy