45 votes

Ajout d'un octet[] à la fin d'un autre octet[]

J'ai deux tableaux byte[] qui sont de longueur inconnue et je veux simplement ajouter l'un à la fin de l'autre, c'est-à-dire :

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

J'ai essayé d'utiliser arraycopy() mais je n'arrive pas à le faire fonctionner.

75voto

krock Points 13537

En utilisant System.arraycopy(), quelque chose comme ce qui suit devrait fonctionner :

// 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);

50voto

Vadim Points 555

Peut-être le moyen le plus simple :

ByteArrayOutputStream output = new ByteArrayOutputStream();

output.write(ciphertext);
output.write(mac);

byte[] out = output.toByteArray();

20voto

MusiGenesis Points 49273

Vous devez déclarer out comme un tableau d'octets avec une longueur égale aux longueurs de ciphertext mac ajoutées ensemble, puis copier ciphertext %-% et out mac la fin, en utilisant la copie de tableau.

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;
} 

9voto

Khulja Sim Sim Points 460

Les autres solutions proposées sont excellentes lorsque vous voulez ajouter seulement 2 tableaux d'octets, mais si vous voulez continuer à ajouter plusieurs fragments d'octets[] pour en faire un seul :

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();

7voto

rsp Points 14367

Vous devez d'abord allouer un tableau de la longueur combinée, puis utiliser arraycopy pour le remplir à partir des deux 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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X