Java:将字节列表转换为字节数组

时间:2010-07-04 21:10:40

标签: java arrays collections

试图解决应该是一个简单的问题。有一个Bytes列表,想要在函数末尾将它转换为一个字节数组。

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

编译器不喜欢toArray上的语法。如何解决这个问题?

4 个答案:

答案 0 :(得分:42)

编译器不喜欢它,因为byte[]不是Byte[]

您可以使用commons-langArrayUtils.toPrimitive(wrapperCollection)

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

如果您不能使用commons-lang,只需循环遍历数组并使用值填充另一个byte[]类型的数组(它们将自动取消装箱)

如果您可以使用Byte[]代替byte[] - 请保持这种状态。

答案 1 :(得分:19)

使用Guava的方法Bytes.toArray(Collection<Byte> collection)

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

这可以节省您必须自己进行Commons Lang等效的中间数组转换。

答案 2 :(得分:2)

主要是,您不能将原始类型与toArray(T[])一起使用。

请参阅:How to convert List<Integer> to int[] in Java?。 这是应用于整数的同样问题。

答案 3 :(得分:1)

还尝试Dollarcheck this revision):

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

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