From e64a283a002c8c9dcd0859b07913c93f3ec1077e Mon Sep 17 00:00:00 2001 From: Jakub Valtar Date: Sun, 21 Jan 2018 17:03:55 +0100 Subject: [PATCH] Net-client: compact the buffer if possible instead of resizing --- java/libraries/net/src/processing/net/Client.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/java/libraries/net/src/processing/net/Client.java b/java/libraries/net/src/processing/net/Client.java index 4eda3b824..da37e503b 100644 --- a/java/libraries/net/src/processing/net/Client.java +++ b/java/libraries/net/src/processing/net/Client.java @@ -236,9 +236,18 @@ public class Client implements Runnable { // todo: at some point buffer should stop increasing in size, // otherwise it could use up all the memory. if (bufferLast == buffer.length) { - byte temp[] = new byte[bufferLast << 1]; - System.arraycopy(buffer, 0, temp, 0, bufferLast); - buffer = temp; + if (bufferIndex > 0) { + // compact the buffer + int bufferLength = bufferLast - bufferIndex; + System.arraycopy(buffer, bufferIndex, buffer, 0, bufferLength); + bufferLast -= bufferIndex; + bufferIndex = 0; + } else { + // resize the buffer + byte temp[] = new byte[bufferLast << 1]; + System.arraycopy(buffer, 0, temp, 0, bufferLast); + buffer = temp; + } } buffer[bufferLast++] = (byte)value; }