Using Bytes for Wrapping ByteBuffer

115 views Asked by At

I have a Chronicle Queue where I have the following class:

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;
    }
}

I use this class to read and write from queue. I need to integrate with internal library that receives this text in the following formats: ByteBuffer and byte[]. I need to send the text with the correct size and without memory alocation, in oder words i need to share the text instance because I apply this library on a Command Chain Pattern and for my poc low latency time is a big deal.

For extract the byte[] without memory allocation I am using the following strategy:

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());

Retrieving the bytebuffer without allocation is a possibility too, but I don't now the best way to do it.

0

There are 0 answers