Использование байтов для упаковки ByteBuffer
У меня есть очередь хроник, где у меня есть следующий класс:
public class Message extends SelfDescribingMarshallable {
private final Bytes<ByteBuffer> text;
private long timeStamp;
public Message(int bufferSize, long timeStamp) {
this.text = Bytes.elasticHeapByteBuffer(bufferSize);
this.timeStamp = timeStamp;
}
public Bytes<ByteBuffer> getText() {
return text;
}
public void setText(CharSequence text) {
this.text.clear().append(text);
}
public long getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(long timeStamp) {
this.timeStamp = timeStamp;
}
}
Я использую этот класс для чтения и записи из очереди. Мне нужно интегрироваться с внутренней библиотекой, которая получает этот текст в следующих форматах: ByteBuffer и byte[]. Мне нужно отправить текст с правильным размером и без выделения памяти, другими словами, мне нужно поделиться экземпляром текста, потому что я применяю эту библиотеку к шаблону цепочки команд, и для моего poc малое время задержки - это большое дело.
Для извлечения byte[] без выделения памяти я использую следующую стратегию:
byte[] textByte = new byte[2048];
ByteBuffer textBuffer = message.getText().underlyingObject();
textBuffer.limit((int) message.getText().readLimit());
textBuffer.position(0);
textBuffer.get(textByte, 0, (int) message.getText().readLimit());
Извлечение байтового буфера без выделения тоже возможно, но сейчас я не знаю, как это сделать лучше всего.