List<byte[]> listOfByteArrays;
我希望通过附加byte[]
中的所有元素,将此List
中存储的所有byte[]
添加到一个List
。我知道一种方法,那就是使用System.arrayCopy()
,但在循环中使用它会有点混乱(temporary variables and byte[] arrays)
。试图找到一种更好的方法,但不能。有什么指针吗?我可以使用任何外部API吗?
答案 0 :(得分:11)
ByteArrayOutputStream out= new ByteArrayOutputStream( );
循环
out.write(eachBytearray);
循环后
byte result[] = out.toByteArray( );
答案 1 :(得分:6)
为什么需要临时数组?
System.arraycopy
将数组从列表复制到目标数组中的适当位置。 (显然,您需要跟踪目标数组中的偏移量。)答案 2 :(得分:5)
Guava的单行:
Bytes.concat(listOfByteArray.toArray(new byte[0][]));
或稍长一点(在较短版本中,toArray
内部发生一个字节数组分配)
Bytes.concat(listOfByteArray.toArray(new byte[listOfByteArray.size()][]));
答案 3 :(得分:3)
这很容易从头开始写:
int length = 0;
for (byte[] ba : listOfByteArrays) {
length += ba.length
}
byte[] total = new byte[length];
int index = 0;
for (byte[] ba : listOfByteArrays) {
for (byte b : ba) {
total[index++] = b;
}
}
total
是所需的字节数组。
答案 4 :(得分:0)
我会循环列表并总结列表中数组的长度。创建一个包含所有内容的byte []。使用System.arrayCopy()循环并复制到适当的索引中。
我认为第三方图书馆不仅仅是因为您所描述的内容。
您似乎知道如何对其进行编码,因此我将省略示例代码。