Java ByteBuffer类

我正在从设备读取byte [],并尝试通过ByteBuffer类将其解释为Java中的整数数组,但是我得到了索引超出范围的错误.看这里:

byteBuffer.put(bytes); // put the array of bytes into the byteBuffer        

System.out.println("the value I want is " + byteBuffer.getInt(16*4)); // gives me the number I want, but I'd rather deal with an integer array like this:

System.out.println("the value I want is " + byteBuffer.asIntBuffer().get(16)); // index out of bounds? Why??

解决方法:

ByteBuffer类在内部存储缓冲区的几个属性.最重要的是缓冲区中(虚拟“光标”的位置).可以使用byteBuffer.position()读取此位置,并使用byteBuffer.position(123);写入.

JavaDoc ByteBuffer.asIntBuffer现在声明:

The content of the new buffer will start at this buffer’s current position.

这意味着,例如,当您有一个容量为16个元素的ByteBuffer,并且此ByteBuffer的position()为4时,则所得的IntBuffer将仅表示其余的12个元素.

调用byteBuffer.put(bytes)之后,字节缓冲区的位置将前进(取决于字节数组的长度).因此,您正在创建的IntBuffer具有较小的容量.

若要解决此问题,可以在调用byteBuffer.put(bytes)之后调用byteBuffer.rewind()或byteBuffer.position(0). (哪种更合适取决于预期的使用方式)

上一篇:Java-ByteBuffer或ArrayList?


下一篇:Java多线程高并发学习笔记(二)——深入理解ReentrantLock与Condition