将 ArrayList<Byte> 转换为 byte[] [重复]
Posted
技术标签:
【中文标题】将 ArrayList<Byte> 转换为 byte[] [重复]【英文标题】:Convert ArrayList<Byte> into a byte[] [duplicate] 【发布时间】:2011-10-15 03:51:28 【问题描述】:可能重复:How to convert an ArrayList containing Integers to primitive int array?
如何将ArrayList<Byte>
转换为byte[]
?
ArrayList.toArray()
给我一个Byte[]
。
【问题讨论】:
ArrayListbyte[] result = new byte[list.size()];
for(int i = 0; i < list.size(); i++)
result[i] = list.get(i).byteValue();
是的,Java 的集合在原始类型方面很烦人。
【讨论】:
尺寸 () 中缺少括号【参考方案2】:调用 toArray() 后,您可以将结果传递给 Apache Commons 的 toPrimitive 方法:
https://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/ArrayUtils.html#toPrimitive-java.lang.Byte:A->
【讨论】:
为此,您仍然必须事先在列表中使用toArray()
。
这个方法接受一个数组作为参数。不是ArrayList
。它需要从ArrayList
转换为数组,然后将Byte
数组转换为byte
数组。不确定这是否是进行转换的最有效方式。
@Vivien 我同意它可能不是最有效的,但可能是最简单的写法。如果性能是一个问题,我会使用 Michael 或 Vivien 的答案。
byte[] b_arr= ArrayUtils.toPrimitive(arrayList.toArray(new Byte[0]));
这个解决方案不起作用。 toPrimitiveArray 返回 int 数组【参考方案3】:
没有想到任何内置方法。但是,编写一个代码非常简单:
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;
请注意,如果in
是null
或者如果它包含nulls
,这将为您提供NullPointerException
。如果您需要不同的行为,如何更改此功能非常明显。
【讨论】:
【参考方案4】:byte[] data = new byte[list.size()];
for (int i = 0; i < data.length; i++)
data[i] = (byte) list.get(i);
请注意,这可能需要一些时间,因为 Byte
对象需要转换为 byte
值。
此外,如果您的列表包含 null
值,则会抛出 NullPointerExcpetion
。
【讨论】:
以上是关于将 ArrayList<Byte> 转换为 byte[] [重复]的主要内容,如果未能解决你的问题,请参考以下文章
java中如何让byte[]与string类型转换后,保持不变