将 ArrayList<Byte> 转换为 byte[]

27

14
ArrayList<Byte> 是存储字节最低效的方式之一。如果您不知道要使用多少字节,请尽量避免使用List<Byte>,而是使用ByteArrayOutputStream的write()和toByteArray()方法。 - Peter Lawrey
4个回答

18
byte[] result = new byte[list.size()];
for(int i = 0; i < list.size(); i++) {
    result[i] = list.get(i).byteValue();
}

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


缺少括号在 size() 中。 - piggyback

9

为此,您仍需要先在列表中使用 toArray() - Marcelo
1
这个方法以数组作为参数,而不是“ArrayList”。它需要将“ArrayList”转换为数组,然后将“Byte”数组转换为“byte”数组。不确定这是否是执行转换的最有效方式。 - Vivien Barousse
@Vivien 我同意这可能不是最高效的,但可能是最简单的编写方式。如果性能是一个问题,我会使用Michael或Vivien的答案。 - JustinKSU
2
byte[] b_arr = ArrayUtils.toPrimitive(arrayList.toArray(new Byte[0])); - jsanmarb
@Andrew,我已经为你修复了链接。 - JustinKSU
显示剩余4条评论

8

我想不到任何内置的方法。然而,编写一个相当简单:

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;
}

请注意,如果 innull 或包含 nulls,这将导致您出现 NullPointerException。如果需要不同的行为,则很明显如何更改此函数。

2
byte[] data = new byte[list.size()];
for (int i = 0; i < data.length; i++) {
    data[i] = (byte) list.get(i);
}

请注意,这可能需要一些时间,因为需要将 Byte 对象转换为 byte 值。
此外,如果您的列表包含 null 值,它将抛出一个 NullPointerExcpetion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接