Convertir ByteBuffer en byte array java [dupliquer]

Cette question a déjà une réponse ici:

Quelqu'un sait-il comment convertir ByteBuffer en byte[] array? J'ai besoin d'obtenir le tableau d'octets à partir de mon ByteBuffer. Quand je run bytebuffer.hasArrray() il ne retourne aucune. Chaque question que j'ai regardé jusqu'à présent est de convertir le tableau byte en byteBuffer, mais j'en ai besoin l'autre manière autour. Remercier.

18
demandé sur Necreaux 2015-02-26 16:44:11

3 réponses

ByteBuffer expose l'essentiel get(byte[]) méthode qui transfère les octets du tampon dans le tableau. Vous devrez instancier un tableau de longueur égale au nombre d'octets restants dans la mémoire tampon.

ByteBuffer buf = ...
byte[] arr = new byte[buf.remaining()];
buf.get(arr);
37
répondu nomis 2018-05-17 12:59:03

Si hasArray() rapports false puis, appelant array() va jeter une exception.

Dans ce cas, la seule façon d'obtenir les données dans un byte[] consiste à allouer un byte[] et copiez les octets dans le byte[] en utilisant get(byte) ou similaire.

2
répondu Stephen C 2015-02-26 14:12:20

exemple Simple de travaux.

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

Toutefois vous dire a tableau renvoie la valeur false. Peut-être, son en lecture seule.

/**
 * 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;
}
-1
répondu Sajith Silva 2015-02-26 13:56:46