我有一个 ByteBuffer 类的包装器(因为在我的代码中,它是实体的底层结构)。我想要一个 ByteBuffer 来存储固定大小的条目,如果我们尝试在没有写入任何内容的偏移量处读取,则返回 null 或抛出异常。我编写了以下代码:
private static final int SIZE = 16; //Bytes
private static final int BBSIZE = 48 * SIZE;
ByteBuffer blockMap = ByteBuffer.allocateDirect(BBSIZE);
byte[] readAtOffset(final int offset) throws BufferUnderflowException,
IndexOutOfBoundsException {
byte[] dataRead = new byte[SIZE];
blockMap.position(offset);
blockMap.get(dataRead);
return dataRead;
}
void writeAtOffset(final int offset, final byte[] data)
throws BufferOverflowException, IndexOutOfBoundsException, ReadOnlyBufferException
{
if (data.length != SIZE) {
throw new IllegalArgumentException("Invalid data received");
}
blockMap.position(offset);
blockMap.put(data);
}
public static void main(String[] args) {
ByteBufferTests tests = new ByteBufferTests();
System.out.println("At 0: " + tests.readAtOffset(0));
}
这不应该引发异常,因为我还没有向缓冲区写入任何内容吗?我究竟做错了什么?