Java: преобразовать список байтов в массив байтов - PullRequest
29 голосов
/ 05 июля 2010

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

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

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

Ответы [ 4 ]

42 голосов
/ 05 июля 2010

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

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

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

Если вы не можете использовать commons-lang, просто переберите массив и заполните другой массив типа byte[] значениями (они будут автоматически распакованы)

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

20 голосов
/ 05 июля 2010

Использование Метод Guava Bytes.toArray (Collection collection) .

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

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

2 голосов
/ 05 июля 2010

В основном вы не можете использовать примитивный тип с toArray(T[]).

См .: Как преобразовать List в int [] в Java? .Это та же проблема, что и для целых чисел.

1 голос
/ 05 июля 2010

попробуйте также Доллар ( проверьте эту версию ):

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

List<Byte> pdu = ...;
byte[] bytes = $(pdu).convert().toByteArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...