2015-02-26 14 views
10

Kann jemand ByteBuffer in Byte [] Array konvertieren? Ich muss Byte-Array von meinem ByteBuffer bekommen. Wenn ich bytebuffer.hasArrray() ausführen, gibt es keine zurück. Jede Frage, die ich bisher untersucht habe, konvertiert Byte-Array in Byte-Puffer, aber ich brauche es andersherum. Danke.Konvertiere ByteBuffer in Byte Array Java

+0

Haben Sie versucht 'byteBuffer.array()'? –

+0

@JohnnyWiller - es wird fehlschlagen ... hasArray gibt 'false' zurück. –

+0

Ja, ich habe keinen Erfolg gehabt. – Powisss

Antwort

23

ByteBuffer legt die Massenmethode get(byte[]) offen, die Bytes aus dem Puffer in das Array überträgt. Sie müssen ein Array der Länge instanziieren, das der Anzahl der verbleibenden Bytes im Puffer entspricht.

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

Code nur Antworten werden normalerweise verbessert, indem Sie etwas Text hinzufügen, der erklärt, was der Code tut - können Sie ein bisschen Text hinzufügen, um dem OP zu erklären? –

+0

Danke mein Mann! – Powisss

1

Wenn hasArray() Berichte false dann, Aufruf array() wirft eine Ausnahme.

In diesem Fall ist die einzige Möglichkeit, die Daten in einem byte[] zu erhalten, ist ein byte[] zuzuweisen und die Bytes an die byte[] mit get(byte) oder ähnlichem kopieren.

-1

Einfache Beispiel funktioniert.

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

Wie auch immer Sie sagen, hat Array zurückgibt falsch. Kann nur gelesen werden.

/** 
* 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; 
}