2010-07-04 4 views
26

Попытка решить, что должно быть простой проблемой. Получил список Bytes, хотите преобразовать его в конце функции в массив байтов.Java: convert Список байтов в массив байтов

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

компилятор не нравится синтаксис на моей toArray. Как это исправить?

ответ

40

Компилятор ему не нравится, потому что byte[] не Byte[].

Что вы можете сделать, это использовать commons-lang «s ArrayUtils.toPrimitive(wrapperCollection):

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

Если вы не можете использовать Викисклад Ланг, просто цикл по массиву и заполнить еще один массив типа byte[] со значениями (они будут beet автоматически распаковывается)

Если вы можете жить с Byte[] вместо byte[] - оставьте его таким же образом.

+0

Спасибо большое! :) Я раньше не видел ArrayUtils.toPrimitive, весьма полезный. –

+1

+1 для этого общедоступного материала –

+1

Мне не нравится решение ArrayUtils. Для Java 8 должно быть готово решение. – JohnMerlino

18

Метод GuavaBytes.toArray(Collection<Byte> collection).

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

Это избавляет вас от необходимости использовать промежуточное преобразование массива, которое требует эквивалент Commons Lang.

1

попробовать также Dollar (check this revision):

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

List<Byte> pdu = ...; 
byte[] bytes = $(pdu).convert().toByteArray(); 
Смежные вопросы