Esta é a maneira recomendada de obter os bytes do ByteBuffer
ByteBuffer bb =..
byte[] b = new byte[bb.remaining()]
bb.get(b, 0, b.length);
Depende do que você quer fazer.
Se o que você quer é recuperar os bytes restantes (entre a posição e o limite), então o que você tem vai funcionar. Você também pode simplesmente fazer:
ByteBuffer bb =..
byte[] b = new byte[bb.remaining()];
bb.get(b);
que é equivalente de acordo com os javadocs ByteBuffer .
bb.capacity()
pode ser igualbb.remaining()
mesmo quando a matriz de apoio é mais longa, portanto, você não deve usar sua igualdade como um teste de quandobb.array()
está correto. VejaByteBuffer.slice()
.bb.slice().remaining()
. Dessa forma, parece um dump limpo sem tocar no buffer original.int
e usar uma máscara de bits:int unsigned_byte = b[k] & 0xff;
para algum valor dek
.ByteBuffer#clear
primeiro?Observe que bb.array () não respeita a posição dos buffers de bytes e pode ser ainda pior se o bytebuffer em que você está trabalhando for uma fatia de algum outro buffer.
Ie
O que pode não ser o que você pretende fazer.
Se você realmente não deseja copiar o byte-array, uma solução alternativa pode ser usar o arrayOffset () + restante () do buffer de bytes, mas isso só funciona se o aplicativo suportar índice + comprimento dos buffers de bytes necessidades.
fonte
Tão simples como isso
fonte
fonte
Se alguém não souber nada sobre o estado interno do ByteBuffer (direto) fornecido e quiser recuperar todo o conteúdo do buffer, isso pode ser usado:
fonte
ByteBuffer.get(byte[])
retorna aByteBuffer
data
variável. O getter retornathis
, consulte seu Javadoc.Esta é uma maneira simples de obter um byte [], mas parte do objetivo de usar um ByteBuffer é evitar a criação de um byte []. Talvez você possa obter o que deseja obter do byte [] diretamente do ByteBuffer.
fonte