将byte 附加到另一个byte 的末尾

我有两个byte[]数组,长度未知,我只想将一个附加到另一个的末尾,即:

 byte[] ciphertext = blah; byte[] mac = blah; byte[] out = ciphertext + mac; 

我已经尝试使用arraycopy()但似乎无法让它工作。

使用System.arraycopy() ,类似以下内容应该工作:

 // create a destination array that is the size of the two arrays byte[] destination = new byte[ciphertext.length + mac.length]; // copy ciphertext into start of destination (from pos 0, copy ciphertext.length bytes) System.arraycopy(ciphertext, 0, destination, 0, ciphertext.length); // copy mac into end of destination (from pos ciphertext.length, copy mac.length bytes) System.arraycopy(mac, 0, destination, ciphertext.length, mac.length); 

你需要声明一个字节数组,其长度等于ciphertextmac加在一起的长度,然后使用arraycopy在outmac的结尾复制ciphertext

 byte[] concatenateByteArrays(byte[] a, byte[] b) { byte[] result = new byte[a.length + b.length]; System.arraycopy(a, 0, result, 0, a.length); System.arraycopy(b, 0, result, a.length, b.length); return result; } 

也许是最简单的方法:

 ByteArrayOutputStream output = new ByteArrayOutputStream(); output.write(ciphertext); output.write(mac); byte[] out = output.toByteArray(); 

当你想只添加2个字节的数组时,其他提供的解决方案很棒,但如果你想继续添加几个byte []块来制作一个:

 byte[] readBytes ; // Your byte array .... //for eg. readBytes = "TestBytes".getBytes(); ByteArrayBuffer mReadBuffer = new ByteArrayBuffer(0 ) ; // Instead of 0, if you know the count of expected number of bytes, nice to input here mReadBuffer.append(readBytes, 0, readBytes.length); // this copies all bytes from readBytes byte array into mReadBuffer // Any new entry of readBytes, you can just append here by repeating the same call. // Finally, if you want the result into byte[] form: byte[] result = mReadBuffer.buffer(); 

首先,您需要分配组合长度的数组,然后使用arraycopy从两个源填充它。

 byte[] ciphertext = blah; byte[] mac = blah; byte[] out = new byte[ciphertext.length + mac.length]; System.arraycopy(ciphertext, 0, out, 0, ciphertext.length); System.arraycopy(mac, 0, out, ciphertext.length, mac.length); 

我编写了以下几个连接数组的过程:

  static public byte[] concat(byte[]... bufs) { if (bufs.length == 0) return null; if (bufs.length == 1) return bufs[0]; for (int i = 0; i < bufs.length - 1; i++) { byte[] res = Arrays.copyOf(bufs[i], bufs[i].length+bufs[i + 1].length); System.arraycopy(bufs[i + 1], 0, res, bufs[i].length, bufs[i + 1].length); bufs[i + 1] = res; } return bufs[bufs.length - 1]; } 

它使用Arrays.copyOf