Java 转换ArrayList<;字节>;转换为字节[]

Java 转换ArrayList<;字节>;转换为字节[],java,arrays,arraylist,primitive-types,Java,Arrays,Arraylist,Primitive Types,可能重复: 如何将ArrayList转换为字节[] ArrayList.toArray()返回一个字节[]Byte[]数据=新字节[list.size()]; byte[] data = new byte[list.size()]; for (int i = 0; i < data.length; i++) { data[i] = (byte) list.get(i); } 对于(int i=0;i byte[]result=新字节[list.size()]; 对于(int i

可能重复:

如何将
ArrayList
转换为
字节[]

ArrayList.toArray()
返回一个
字节[]

Byte[]数据=新字节[list.size()];
byte[] data = new byte[list.size()];
for (int i = 0; i < data.length; i++) {
    data[i] = (byte) list.get(i);
}
对于(int i=0;i
请注意,这可能需要一些时间,因为
Byte
对象需要转换为
Byte

此外,如果列表中包含
null
值,则调用toArray()后将抛出
NullPointerException
,您可以将结果传递到Apache Commons TopPrimitive方法:

>

byte[]result=新字节[list.size()];
对于(int i=0;i

是的,当涉及到基本类型时,Java的集合很烦人。

没有想到内置方法。但是,编写一个代码非常简单:

public static byte[] toByteArray(List<Byte> in) {
    final int n = in.size();
    byte ret[] = new byte[n];
    for (int i = 0; i < n; i++) {
        ret[i] = in.get(i);
    }
    return ret;
}
公共静态字节[]toByteArray(中的列表){
最终整数n=英寸大小();
字节ret[]=新字节[n];
对于(int i=0;i

请注意,如果
中的
null
或它包含
null
,则这将为您提供一个
null点异常。如果您需要不同的行为,很明显如何更改此函数。

为此,您仍然需要事先在列表中使用
toArray()
。此方法将数组作为参数。不是
数组列表
。它需要从
数组列表
转换为数组,然后将
字节
数组转换为
字节
数组。不确定这是否是进行转换的最有效的方法。@Vivien我同意这可能不是最有效的,但可能是最简单的编写方法。如果性能是个问题,我会使用Michael或Vivien的答案。byte[]b_arr=ArrayUtils.toPrimitive(arrayList.toArray(新字节[0]);这个解决方案不起作用。TopPrimitiveArray返回intArrayList的数组大约是存储字节的最低效的方法。如果您不知道使用ByteArrayOutputStream with write()和toByteArray()将有多少字节,如果可以避免,请不要使用List。大小中缺少括号()
public static byte[] toByteArray(List<Byte> in) {
    final int n = in.size();
    byte ret[] = new byte[n];
    for (int i = 0; i < n; i++) {
        ret[i] = in.get(i);
    }
    return ret;
}