Manera sencilla de concatenar dos matrices de bytes
¿ Cuál es la manera fácil de concatenar dos byte
matrices?
Decir,
byte a[];
byte b[];
¿Cómo concateno dos byte
matrices y las almaceno en otra byte
matriz?
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( );
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);
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.
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).