Se gli array non sono contenuti in una struttura dinamica, ma sono "sciolti", dovrai per forza agire staticamente sul codice per ottenere la dimensione dei vari array e per effettuare la concatenazione:

codice:
byte[] risultato = new byte[a1.length + a2.length + a3.length + ... + an.length];
int pos = 0;
for(int i=0; i<a1.length; i++) risultato[pos++] = a1[i];
for(int i=0; i<a2.length; i++) risultato[pos++] = a2[i];
for(int i=0; i<a3.length; i++) risultato[pos++] = a3[i];
...
for(int i=0; i<an.length; i++) risultato[pos++] = an[i];

// risultato sarà un array contenente la concatenazione di tutti gli altri
Se, al contrario, gli array sono contenuti in una struttura dati (tipo un ArrayList di array di byte), allora risulta più semplice:

codice:
ArrayList<byte[]> struttura = new ArrayList<byte[]>();
...
int dimTot = 0;
for(byte[] arr : struttura) dimTot += arr.length;
byte[] risultato = new byte[ dimTot ];
int pos = 0;
for(byte[] arr : struttura) {
   for(int i=0; i<arr.length; i++) risultato[pos++] = arr[i];
}

// risultato sarà un array contenente la concatenazione di tutti gli altri
Ciao.