Avoid additional copy on Java text parsing

Directly pass the buffer range to the String constructor.
This commit is contained in:
Romain Vimont 2020-06-04 18:33:42 +02:00
parent 8f314c74b0
commit a00a8763d6

View file

@ -21,7 +21,6 @@ public class ControlMessageReader {
private final byte[] rawBuffer = new byte[MESSAGE_MAX_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() {