diff --git a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/BinaryWholeMessage.java b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/BinaryWholeMessage.java index 770a0657fdb..e1bc52d0180 100644 --- a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/BinaryWholeMessage.java +++ b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/messages/BinaryWholeMessage.java @@ -51,7 +51,7 @@ public class BinaryWholeMessage extends SimpleBinaryMessage { super.finished = true; - byte[] data = out.toByteArray(); + byte[] data = (out == null) ? new byte[]{} : out.toByteArray(); DecoderFactory.Wrapper decoder = msgWrapper.getDecoder(); Decoder.Binary binaryDecoder = (Binary)decoder.getDecoder(); diff --git a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/message/SimpleBinaryMessage.java b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/message/SimpleBinaryMessage.java index e903a503c18..ee3ca31b391 100644 --- a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/message/SimpleBinaryMessage.java +++ b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/message/SimpleBinaryMessage.java @@ -18,25 +18,24 @@ package org.eclipse.jetty.websocket.common.message; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import org.eclipse.jetty.util.BufferUtil; +import org.eclipse.jetty.util.ByteArrayOutputStream2; import org.eclipse.jetty.websocket.common.events.EventDriver; public class SimpleBinaryMessage implements MessageAppender { private static final int BUFFER_SIZE = 65535; private final EventDriver onEvent; - protected final ByteArrayOutputStream out; + protected ByteArrayOutputStream2 out; private int size; protected boolean finished; public SimpleBinaryMessage(EventDriver onEvent) { this.onEvent = onEvent; - this.out = new ByteArrayOutputStream(BUFFER_SIZE); finished = false; } @@ -57,6 +56,8 @@ public class SimpleBinaryMessage implements MessageAppender onEvent.getPolicy().assertValidBinaryMessageSize(size + payload.remaining()); size += payload.remaining(); + if (out == null) + out = isLast ? new ByteArrayOutputStream2(size) : new ByteArrayOutputStream2(BUFFER_SIZE); BufferUtil.writeTo(payload, out); } @@ -64,7 +65,13 @@ public class SimpleBinaryMessage implements MessageAppender public void messageComplete() { finished = true; - byte[] data = out.toByteArray(); + byte[] data; + if (out == null) + data = new byte[]{}; + else if (out.getCount() == out.getBuf().length) + data = out.getBuf(); + else + data = out.toByteArray(); onEvent.onBinaryMessage(data); } }