将 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&lt;Byte&gt; 转换为byte[]

ArrayList.toArray() 给我一个Byte[]

【问题讨论】:

ArrayList 是存储字节的最低效的方式。如果您不知道将 ByteArrayOutputStream 与 write() 和 toByteArray() 一起使用会有多少字节,请尽量避免使用 List 【参考方案1】:
byte[] 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;

请注意,如果innull 或者如果它包含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类型转换后,保持不变

Java - ByteBuffer 或 ArrayList<Byte>?

C# byte数组转成Bitmap对象

C# Byte[] 转String 无损转换

转java中float与byte[]的互转 -- 不错

一组十六进制的字符串每两个转成对应值的byte