¿Es esta la forma recomendada de obtener los bytes del ByteBuffer?
ByteBuffer bb =..
byte[] b = new byte[bb.remaining()]
bb.get(b, 0, b.length);
depende de lo que quieras hacer.
Si lo que quieres es recuperar los bytes que quedan (entre posición y límite), entonces lo que tienes funcionará. También puedes hacer:
ByteBuffer bb =..
byte[] b = new byte[bb.remaining()];
bb.get(b);
que es equivalente según los javadocs ByteBuffer .
bb.capacity()
podría ser igualbb.remaining()
incluso cuando la matriz de respaldo sea más larga, por lo que no debe usar su igualdad como una prueba de cuándobb.array()
es correcta. VerByteBuffer.slice()
.bb.slice().remaining()
. De esa manera, parece un vertedero limpio sin tocar el búfer original.int
y usar una máscara de bits:int unsigned_byte = b[k] & 0xff;
para algún valor dek
.ByteBuffer#clear
primero?Tenga en cuenta que bb.array () no respeta la posición de los búferes de bytes y podría ser incluso peor si el búfer de bytes en el que está trabajando es una porción de algún otro búfer.
Es decir
Lo cual podría no ser lo que pretendes hacer.
Si realmente no desea copiar la matriz de bytes, una solución podría ser usar la matrizOffset () + restante () del búfer de bytes, pero esto solo funciona si la aplicación admite índice + longitud de los búferes de bytes necesidades.
fuente
Tan sencillo como eso
fuente
fuente
Si uno no sabe nada sobre el estado interno del ByteBuffer (Directo) dado y desea recuperar todo el contenido del búfer, se puede utilizar:
fuente
ByteBuffer.get(byte[])
devuelve aByteBuffer
data
variable. El captador regresathis
, vea su Javadoc.Esta es una forma sencilla de obtener un byte [], pero parte del objetivo de usar un ByteBuffer es evitar tener que crear un byte []. Quizás pueda obtener lo que quiera obtener del byte [] directamente del ByteBuffer.
fuente