У меня есть оболочка вокруг класса 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));
}
Разве это не должно вызвать исключение, поскольку я еще ничего не записал в буфер? Что я делаю неправильно?
ByteBuffer
, вы должны сначалаflip
его. - person user207421   schedule 20.08.2013