Quel est le moyen le plus simple de concaténer deux byte
des tableaux ?
Dites,
byte a[];
byte b[];
Comment concaténer deux byte
et le stocker dans un autre byte
le réseau ?
Quel est le moyen le plus simple de concaténer deux byte
des tableaux ?
Dites,
byte a[];
byte b[];
Comment concaténer deux byte
et le stocker dans un autre byte
le réseau ?
@vipw La raison pour laquelle cela est élégant est que si/quand vous souhaitez concaténer un troisième tableau plus tard, vous ajoutez simplement la ligne outputStream.write( c );
- vous n'avez pas besoin de revenir en arrière et de modifier la ligne où vous créez le tableau d'octets de résultat. De plus, la réorganisation des tableaux est simple, contrairement à l'utilisation de la méthode arraycopy.
De plus, cette méthode est beaucoup plus simple lorsque l'on travaille avec des tableaux de plus de 2 octets.
Le fait de gaspiller du processeur et de la mémoire dépend de la fréquence de l'opération. Si c'est un milliard de fois par seconde, il faut l'optimiser. Sinon, la lisibilité et la maintenabilité peuvent être les considérations gagnantes.
Voici une solution intéressante qui utilise Goyave 's com.google.common.primitives.Bytes
:
byte[] c = Bytes.concat(a, b);
L'avantage de cette méthode est qu'elle possède une signature varargs :
public static byte[] concat(byte[]... arrays)
ce qui signifie que vous pouvez concaténer un nombre arbitraire de tableaux en un seul appel de méthode.
Une autre possibilité consiste à utiliser java.nio.ByteBuffer
.
Quelque chose comme
ByteBuffer bb = ByteBuffer.allocate(a.length + b.length + c.length);
bb.put(a);
bb.put(b);
bb.put(c);
byte[] result = bb.array();
// or using method chaining:
byte[] result = ByteBuffer
.allocate(a.length + b.length + c.length)
.put(a).put(b).put(c)
.array();
Notez que le tableau doit avoir une taille appropriée pour commencer, donc la ligne d'allocation est nécessaire (comme array()
renvoie simplement le tableau de support, sans prendre en compte le décalage, la position ou la limite).
@click_whir Désolé mec, mais ReadTheDocs. ByteBuffer.allocate(int)
est une méthode statique qui renvoie un fichier de type java.nio.HeapByteBuffer
une sous-classe de ByteBuffer
. Le site .put()
y .compact()
et tout autre caractère abstrait - est pris en charge.
Faites attention lorsque vous utilisez la méthode array() du ByteBuffer - à moins que vous ne sachiez absolument ce que vous faites et que la maintenabilité ne soit pas un problème, il n'y a aucune garantie que la position zéro dans le bytebuffer corresponde toujours à l'index 0 du tableau d'octets. Voir aquí . Je résous ce problème en émettant bb.flip(); bb.get(result);
à la place de la byte[] result = bb.array();
línea.
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.
3 votes
Notez s'il vous plaît que Apache Commons, Google's Guava,
System.arrayCopy
,ByteBuffer
et le - pas si efficace mais lisible -ByteArrayOutputStream
ont tous été couverts. Nous avons plus de 7 doublons des réponses données ici. S'il vous plaît, ne postez pas d'autres doublons.