java arrays bytearray bytebuffer

Convertir ByteBuffer a byte array java



arrays bytearray (3)

Esta pregunta ya tiene una respuesta aquí:

¿Alguien sabe cómo convertir ByteBuffer a byte [] array? Necesito obtener una matriz de bytes de mi ByteBuffer . Cuando ejecuto bytebuffer.hasArrray() devuelve no. Cada pregunta que busqué hasta ahora es la conversión de la matriz de bytes a byteBuffer, pero la necesito al revés. Gracias.


La muestra simple funciona.

ByteBuffer bb1 = ByteBuffer.wrap("hello world".getBytes()); System.out.println(bb1.hasArray()); System.out.println(new String(bb1.array()));

Sin embargo, usted dice que la matriz devuelve false. Puede ser su lectura solamente.

/** * Tells whether or not this buffer is backed by an accessible byte * array. * * <p> If this method returns <tt>true</tt> then the {@link #array() array} * and {@link #arrayOffset() arrayOffset} methods may safely be invoked. * </p> * * @return <tt>true</tt> if, and only if, this buffer * is backed by an array and is not read-only */ public final boolean hasArray() { return (hb != null) && !isReadOnly; }


Si hasArray() informa que es false , al llamar a array() se lanzará una excepción.

En ese caso, la única manera de obtener los datos en un byte[] es asignar un byte[] y copiar los bytes en el byte[] utilizando get(byte) o similar.


ByteBuffer expone el método de get(byte[]) masiva get(byte[]) que transfiere bytes del búfer a la matriz. Tendrá que crear una instancia de una matriz de longitud igual al número de bytes restantes en el búfer.

ByteBuffer buf = ... byte[] arr = new byte[buf.remaining()]; buf.get(arr);