Um den Effekt der Größenänderung eines Byte-Arrays zu erreichen, ohne den Inhalt zu verlieren, gibt es in Java mehrere bereits erwähnte Lösungen:
1) ArrayList<Byte>
(siehe die Antworten von a.ch. und kgiannakakis)
2) System.arraycopy()
(siehe die Antworten von jimpic, kgiannakakis und UVM)
Etwa so:
byte[] bytes = new byte[1024];
//
// Do some operations with array bytes
//
byte[] bytes2 = new byte[2024];
System.arraycopy(bytes,0,bytes2,0,bytes.length);
//
// Do some further operations with array bytes2 which contains
// the same first 1024 bytes as array bytes
3) Ich möchte noch eine dritte Möglichkeit hinzufügen, die ich für sehr elegant halte: Arrays.copyOfRange()
byte[] bytes = new byte[1024];
//
// Do some operations with array bytes
//
bytes = Arrays.copyOfRange(bytes,0,2024);
//
// Do some further operations with array bytes whose first 1024 bytes
// didn't change and whose remaining bytes are padded with 0
Natürlich gibt es noch weitere Lösungen (z. B. das Kopieren der Bytes in einer Schleife). In Bezug auf die Effizienz, siehe dies