如何简单地连接两个 byte
数组?
比如说,
byte a[];
byte b[];
我如何将两个byte
数组连接起来并存储到另一个byte
数组中?
如何简单地连接两个 byte
数组?
比如说,
byte a[];
byte b[];
我如何将两个byte
数组连接起来并存储到另一个byte
数组中?
如果您要合并包含PDF的两个字节数组,则此逻辑将无法正常工作。我们需要使用第三方工具,如Apache的PDFbox:
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
mergePdf.addSource(new ByteArrayInputStream(a));
mergePdf.addSource(new ByteArrayInputStream(b));
mergePdf.setDestinationStream(byteArrayOutputStream);
mergePdf.mergeDocuments();
c = byteArrayOutputStream.toByteArray();
如果您已经加载了Guava库,您可以使用com.google.common.primitives.Bytes
中的静态方法concat(byte[]... arrays)
:
byte[] c = Bytes.concat(a, b);
这里是“Kevin Bourrillion”编写的concat(byte[]... arrays)
方法的独立源代码:
public static byte[] concat(byte[]... arrays) {
int length = 0;
for (byte[] array : arrays) {
length += array.length;
}
byte[] result = new byte[length];
int pos = 0;
for (byte[] array : arrays) {
System.arraycopy(array, 0, result, pos, array.length);
pos += array.length;
}
return result;
}
这是我的做法!
public static byte[] concatByteArrays(byte[]... inputs) {
int i = inputs.length - 1, len = 0;
for (; i >= 0; i--) {
len += inputs[i].length;
}
byte[] r = new byte[len];
for (i = inputs.length - 1; i >= 0; i--) {
System.arraycopy(inputs[i], 0, r, len -= inputs[i].length, inputs[i].length);
}
return r;
}
特点:
...
),可以调用任意数量的byte[]。System.arraycopy()
,确保高速操作。int
变量。请记住:
更好的方法是复制@Jonathan code。问题来自于本地变量数组,因为当这种数据类型传递到另一个函数时,Java会创建新变量。
System.arrayCopy
、ByteBuffer
以及效率不高但易读的ByteArrayOutputStream
都已经被涵盖在内。我们已经有超过7个重复的答案了,请不要再发布重复内容。 - Maarten Bodewes