从List <byte> </byte>创建byte []

时间:2009-10-14 10:30:47

标签: java

最有效的方法是什么?

3 个答案:

答案 0 :(得分:13)

byte[] byteArray = new byte[byteList.size()];
for (int index = 0; index < byteList.size(); index++) {
    byteArray[index] = byteList.get(index);
}

您可能不喜欢它,但这是创建byte的Genuine™Array®的唯一方法。

正如评论中指出的,还有其他方法。然而,这些方法都没有绕过a)创建数组和b)分配每个元素。这个使用iterator

byte[] byteArray = new byte[byteList.size()];
int index = 0;
for (byte b : byteList) {
    byteArray[index++] = b;
}

答案 1 :(得分:4)

toArray()方法听起来是个不错的选择。

更新:尽管如此,正如大家所指出的那样,这与“盒装”值一起使用。所以简单的for - 循环看起来也是一个非常好的选择。

答案 2 :(得分:2)

使用Bytes.toArray(Collection<Byte>)(来自Google的Guava库。)

示例:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.google.common.primitives.Bytes;

class Test {
    public static void main(String[] args) {
        List<Byte> byteList = new ArrayList<Byte>();
        byteList.add((byte) 1);
        byteList.add((byte) 2);
        byteList.add((byte) 3);
        byte[] byteArray = Bytes.toArray(byteList);
        System.out.println(Arrays.toString(byteArray));
    }
}

或类似地,使用PCJ

import bak.pcj.Adapter;

// ...

byte[] byteArray = Adapter.asBytes(byteList).toArray();