2
List<byte[]> listOfByteArrays;

我想通过将所有byte[]元素附加List到. 我知道一种方法,那就是使用,但在循环中使用它会有点混乱。试图找到一种更好的方法,但不能。任何指针?我可以使用任何外部 API 吗?byte[]ListSystem.arrayCopy()(temporary variables and byte[] arrays)

4

5 回答 5

11

尝试使用ByteArrayOutputStream

ByteArrayOutputStream out= new ByteArrayOutputStream( );

循环中

out.write(eachBytearray);

循环后

byte result[] = out.toByteArray( );
于 2013-08-16T15:24:02.223 回答
6

为什么需要临时数组?

  • 遍历您的列表,将各个数组的长度相加。
  • 创建一个足够大的数组来容纳它们
  • 再次遍历您的列表,System.arraycopy用于将列表中的数组复制到目标数组中的适当位置。(显然,您需要跟踪目标数组中的偏移量。)
于 2013-08-16T15:23:13.877 回答
5

番石榴单线

Bytes.concat(listOfByteArray.toArray(new byte[0][]));

或更长一点(toArray在较短的版本中保留一个字节数组分配)

Bytes.concat(listOfByteArray.toArray(new byte[listOfByteArray.size()][]));
于 2013-08-16T15:30:43.530 回答
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是所需的字节数组。

于 2013-08-16T15:24:12.020 回答
0

我会循环列表并总结列表中数组的长度。创建一个包含所有内容的 byte[]。使用 System.arrayCopy() 循环并复制到适当的索引中。

我不认为 3rd 方库仅用于您所描述的事情。

您似乎知道如何编写代码,所以我将省略示例代码。

于 2013-08-16T15:23:09.123 回答