From e7f4478b958ecaa526b1688040d0c509a1e13fc4 Mon Sep 17 00:00:00 2001 From: Ben Kay Date: Wed, 21 Sep 2011 17:04:51 +0100 Subject: [PATCH] Improved performance when recieving data --- src/net/tootallnate/websocket/WebSocket.java | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/net/tootallnate/websocket/WebSocket.java b/src/net/tootallnate/websocket/WebSocket.java index 9137cc996..ff227c2e9 100644 --- a/src/net/tootallnate/websocket/WebSocket.java +++ b/src/net/tootallnate/websocket/WebSocket.java @@ -235,7 +235,11 @@ private void recieveFrame() { // START_OF_FRAME, thus we will send 'null' as the sent message. if (this.currentFrame != null) { try { - textFrame = new String(this.currentFrame.array(), UTF8_CHARSET); + byte[] frame = new byte[this.currentFrame.position()]; + this.currentFrame.rewind(); + this.currentFrame.get(frame, 0, frame.length); + this.currentFrame = null; + textFrame = new String(frame, UTF8_CHARSET); } catch (UnsupportedEncodingException ex) { // TODO: Fire an 'onError' handler here ex.printStackTrace(); @@ -245,13 +249,17 @@ private void recieveFrame() { this.wsl.onMessage(this, textFrame); } else { // Regular frame data, add to current frame buffer - ByteBuffer frame = ByteBuffer.allocate((this.currentFrame != null ? this.currentFrame.capacity() : 0) + this.buffer.capacity()); - if (this.currentFrame != null) { + if (this.currentFrame == null) { + this.currentFrame = ByteBuffer.allocate(8192); + } else if (!this.currentFrame.hasRemaining()) { this.currentFrame.rewind(); - frame.put(this.currentFrame); + ByteBuffer newBuffer = ByteBuffer.allocate(this.currentFrame.capacity() * 2); + newBuffer.put(this.currentFrame); + this.currentFrame = newBuffer; } - frame.put(newestByte); - this.currentFrame = frame; + + this.currentFrame.put(newestByte); + } }