Manera sencilla de concatenar dos matrices de bytes

Resuelto androidGuy asked hace 13 años • 13 respuestas

¿ Cuál es la manera fácil de concatenar dos bytematrices?

Decir,

byte a[];
byte b[];

¿Cómo concateno dos bytematrices y las almaceno en otra bytematriz?

androidGuy avatar Apr 01 '11 19:04 androidGuy
Aceptado

La forma más elegante de hacerlo es con un archivo ByteArrayOutputStream.

byte a[];
byte b[];

ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
outputStream.write( a );
outputStream.write( b );

byte c[] = outputStream.toByteArray( );
Kevin avatar Feb 03 '2012 18:02 Kevin

Lo más sencillo:

byte[] c = new byte[a.length + b.length];
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
Jonathan avatar Apr 01 '2011 12:04 Jonathan

Aquí hay una buena solución usando Guavacom.google.common.primitives.Bytes :

byte[] c = Bytes.concat(a, b);

Lo bueno de este método es que tiene una firma varargs:

public static byte[] concat(byte[]... arrays)

lo que significa que puede concatenar un número arbitrario de matrices en una sola llamada a un método.

Zoltán avatar Apr 25 '2014 12:04 Zoltán

Otra posibilidad es utilizar java.nio.ByteBuffer.

Algo como

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

Tenga en cuenta que, para empezar, la matriz debe tener el tamaño adecuado, por lo que se requiere la línea de asignación (ya que array()simplemente devuelve la matriz de respaldo, sin tener en cuenta el desplazamiento, la posición o el límite).

kalefranz avatar Apr 05 '2013 03:04 kalefranz