Java: конвертировать список байтов в массив байтов
Попытка решить, что должно быть простой проблемой. Получил список байтов, хочу преобразовать его в конце функции в массив байтов.
final List<Byte> pdu = new ArrayList<Byte>();
....
return pdu.toArray(new byte[pdu.size()]);;
компилятор не любит синтаксис на моем toArray
. Как это исправить?
Ответы
Ответ 1
Компилятор ему не нравится, потому что byte[]
не byte[]
.
Что вы можете сделать, это использовать commons-lang ArrayUtils.toPrimitive(wrapperCollection)
:
Byte[] bytes = pdu.toArray(new Byte[pdu.size()]);
return ArrayUtils.toPrimitive(bytes);
Если вы не можете использовать commons-lang, просто выполните цикл через массив и заполните другой массив типа byte[]
со значениями (они будут автоматически распакованы)
Если вы можете жить с byte[]
вместо byte[]
- оставьте его таким образом.
Ответ 2
Используйте Guava метод Bytes.toArray(Collection <Byte> сбор).
List<Byte> list = ...
byte[] bytes = Bytes.toArray(list);
Это избавляет вас от необходимости делать промежуточное преобразование массива, которое требует эквивалент Commons Lang.
Ответ 3
В основном вы не можете использовать примитивный тип с toArray(T[])
.
Смотрите: Как преобразовать List <Integer> to int [] в Java?.
Это та же проблема, что и для целых чисел.
Ответ 4
попробуйте также Dollar (проверить эту версию):
import static com.humaorie.dollar.Dollar.*
...
List<Byte> pdu = ...;
byte[] bytes = $(pdu).convert().toByteArray();