【问题标题】:Convert ArrayList<Byte> into a byte[] [duplicate]将 ArrayList<Byte> 转换为 byte[] [重复]
【发布时间】: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

标签: java arrays arraylist primitive-types


【解决方案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

    【讨论】:

      猜你喜欢
      • 2015-06-04
      • 2011-06-08
      • 1970-01-01
      • 2018-02-19
      • 2017-12-09
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      相关资源
      最近更新 更多