我有一个编年史队列,其中有以下课程:
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[] 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());
在没有分配的情况下检索字节缓冲区也是可能的,但我现在不是最好的方法。