Получить объект ByteBuffer из байтов<ByteBuffer>
Я пытался получить ссылку на объект ByteBuffer (Direct) из объекта Bytes. Ниже приведен код:
TestMessageWire testMessageWire = new TestMessageWire();
testMessageWire.data('H');
testMessageWire.setIntData(100);
//Below does not give ByteBuffer with correct position & offset
Bytes<ByteBuffer> bytes = Bytes.elasticByteBuffer(10);
Wire wire = new RawWire(bytes);
testMessageWire.writeMarshallable(wire);
ByteBuffer byteBuffer = ByteBuffer.wrap(bytes.toByteArray());
//Another approach, but still does not populate "byteBuffer" object correctly.
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(6);
Bytes<?> bytes = Bytes.wrapForWrite(byteBuffer);
Wire wire = new RawWire(bytes);
testMessageWire.writeMarshallable(wire);
Я хочу избежать многократного выделения при создании объекта ByteBuffer. Следовательно, хочу повторно использовать тот же Bitebuffer, завернутый байтами. Как мне этого добиться?
1 ответ
Вы можете создать байты, которые оборачивают ByteBuffer. Это позволяет избежать лишних копий.
Bytes<ByteBuffer> bytes = Bytes.elasticByteBuffer();
ByteBuffer bb = bytes.underlyingObject();
Тем не менее, вы должны убедиться, что позиция и ограничение ByteBuffer поддерживаются, поскольку у байтов есть отдельная позиция чтения / записи и лимит.
например, после записи вы можете захотеть сделать следующее, чтобы вы могли читать из ByteBuffer то, что было записано в байты.
bb.position((int) bytes.readPosition());
bb.limit((int) bytes.readLimit());