Ist dies die empfohlene Methode, um die Bytes aus dem ByteBuffer abzurufen?
ByteBuffer bb =..
byte[] b = new byte[bb.remaining()]
bb.get(b, 0, b.length);
Kommt darauf an, was du machen willst.
Wenn Sie die verbleibenden Bytes (zwischen Position und Limit) abrufen möchten, funktioniert das, was Sie haben. Sie könnten auch einfach tun:
ByteBuffer bb =..
byte[] b = new byte[bb.remaining()];
bb.get(b);
Dies entspricht den ByteBuffer- Javadocs.
bb.capacity()
möglicherweise auch dann gleich istbb.remaining()
, wenn das Backing-Array länger ist. Sie dürfen daher die Gleichheit nicht als Test für diebb.array()
Richtigkeit verwenden. SieheByteBuffer.slice()
.bb.slice().remaining()
. Auf diese Weise sieht es aus wie ein sauberer Speicherauszug, ohne den ursprünglichen Puffer zu berühren.int
Bitmaske umwandeln und verwenden:int unsigned_byte = b[k] & 0xff;
für einen Wert vonk
.ByteBuffer#clear
zuerst aufrufen ?Beachten Sie, dass bb.array () die Position der Bytepuffer nicht berücksichtigt und möglicherweise noch schlimmer ist, wenn der Bytebuffer, an dem Sie arbeiten, ein Teil eines anderen Puffers ist.
Dh
Welches könnte nicht das sein, was Sie vorhaben.
Wenn Sie das Byte-Array wirklich nicht kopieren möchten, können Sie das ArrayOffset () + verbleibend () des Byte-Puffers verwenden. Dies funktioniert jedoch nur, wenn die Anwendung den Index + die Länge der Byte-Puffer unterstützt Bedürfnisse.
quelle
So einfach ist das
quelle
quelle
Wenn man nichts über den internen Zustand des gegebenen (direkten) ByteBuffers weiß und den gesamten Inhalt des Puffers abrufen möchte, kann dies verwendet werden:
quelle
ByteBuffer.get(byte[])
gibt aByteBuffer
data
Variablen. Der Getter kehrt zurückthis
, siehe Javadoc.Dies ist eine einfache Möglichkeit, ein Byte [] abzurufen. Ein Teil der Verwendung eines ByteBuffers besteht jedoch darin, zu vermeiden, dass ein Byte [] erstellt werden muss. Vielleicht können Sie aus dem Byte [] direkt aus dem ByteBuffer alles bekommen, was Sie wollen.
quelle