Avoid additional copy on Java text parsing

Directly pass the buffer range to the String constructor.
left_ctrl
Romain Vimont 4 years ago
parent 80f5a7c43d
commit a01e9c2812

@ -21,7 +21,6 @@ public class ControlMessageReader {
private final byte[] rawBuffer = new byte[RAW_BUFFER_SIZE];
private final ByteBuffer buffer = ByteBuffer.wrap(rawBuffer);
private final byte[] textBuffer = new byte[CLIPBOARD_TEXT_MAX_LENGTH];
public ControlMessageReader() {
// invariant: the buffer is always in "get" mode
@ -111,8 +110,10 @@ public class ControlMessageReader {
if (buffer.remaining() < len) {
return null;
}
buffer.get(textBuffer, 0, len);
return new String(textBuffer, 0, len, StandardCharsets.UTF_8);
int position = buffer.position();
// Move the buffer position to consume the text
buffer.position(position + len);
return new String(rawBuffer, position, len, StandardCharsets.UTF_8);
}
private ControlMessage parseInjectText() {

Loading…
Cancel
Save