[英]How to concatinate byte array in java
用Java将两个字节数组连接起来的简单方法是什么? 我使用了此功能,但出现错误:
java.lang.ArrayIndexOutOfBoundsException:16
我的职能是:
public static byte[] concatinate(byte[] a, byte[] b) {
byte[] c = new byte[100];
for (int i = 0; i < (a.length + b.length); i++) {
if (i < a.length) {
c[i] = a[i];
} else {
c[i] = b[i];
}
}
return c;
}
首先,如果a.length + b.length > 100
,您的代码必然会失败。 您应该使用a.length + b.length
作为c
的长度。
是的,因为当您超过a.length
,您仍在尝试使用b[i]
。 假设a.length为50,b.length为1。您要填充51个数组元素,但是要填充c [50],则需要b [0],而不是b [50]。
您只需更改以下内容:
c[i] = b[i];
对此:
c[i] = b[i - a.length];
...或者按照Mureinik的回答有两个循环。 (我不希望任何一个选项都比另一个选项快得多,而且它们绝对是等效的-您可以使用最容易阅读的选项。)
但是,我建议改用System.arraycopy
:
public static byte[] concatenate(byte[] a, byte[] b) {
byte[] c = new byte[a.length + b.length];
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
return c;
}
简单得多:)
只需定义的阵列结合的两个阵列的大小,并单独迭代它们:
public static byte[] concatinate(byte[] a, byte[] b) {
byte[] c = new byte[a.length + b.length];
for (int i = 0; i < a.length; i++) {
c[i] = a[i];
}
for (int i = 0; i < b.length; i++) {
c[a.length + i] = b[i];
}
return c;
}
追加2 byte []的代码很好。如果您想继续追加byte [],则可以使用此代码。
byte [] readBytes; //您的字节数组.... //例如 readBytes =“ TestBytes” .getBytes();
ByteArrayBuffer mReadBuffer = new ByteArrayBuffer(0); //而不是0,如果您知道期望的字节数,可以在此处输入
mReadBuffer.append(readBytes,0,readBytes.length); //这会将所有字节从readBytes字节数组复制到mReadBuffer //任何新的readBytes条目,您都可以在这里通过重复相同的调用来追加。
//最后,如果要将结果转换为byte []形式:byte [] result = mReadBuffer.buffer();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.