Appending a byte[] to the end of another byte[]
131,052
Solution 1
Using System.arraycopy()
, something like the following should work:
// 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);
Solution 2
Perhaps the easiest way:
ByteArrayOutputStream output = new ByteArrayOutputStream();
output.write(ciphertext);
output.write(mac);
byte[] out = output.toByteArray();
Solution 3
You need to declare out
as a byte array with a length equal to the lengths of ciphertext
and mac
added together, and then copy ciphertext
over the beginning of out
and mac
over the end, using arraycopy.
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;
}
Solution 4
The other provided solutions are great when you want to add only 2 byte arrays, but if you want to keep appending several byte[] chunks to make a single:
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();
Solution 5
First you need to allocate an array of the combined length, then use arraycopy to fill it from both sources.
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);
Author by
Mitch
Updated on July 14, 2022Comments
-
Mitch almost 2 years
I have two
byte[]
arrays which are of unknown length and I simply want to append one to the end of the other, i.e.:byte[] ciphertext = blah; byte[] mac = blah; byte[] out = ciphertext + mac;
I have tried using
arraycopy()
but can't seem to get it to work. -
Mitch about 13 yearsExcellent! Thanks for the quick solution. Works like a charm and seems so simple now!
-
Sorter about 8 yearsI found this more useful.
-
pete almost 7 yearsEasiest and perhaps best supported as ByteArrayBuffer seems deprecated.
-
Shashwat almost 7 yearsI believe it will create difficulties if we don't know the size of the final array in advance.
-
Kroderia about 6 yearsBest answer. It ensures the capacity without calculate it yourself.
-
krock almost 5 years@Shashwat in this case, we already know the length of
ciphertext
andmac
byte arrays. That means we know the length of the new byte array should be the combined length of the original 2 byte arrays. -
TommyLeong over 2 yearsLife saving answer