diff --git a/common/buffers/src/main/java/io/helidon/common/buffers/CompositeArrayBufferData.java b/common/buffers/src/main/java/io/helidon/common/buffers/CompositeArrayBufferData.java index f7abee18b39..ef529aecdc4 100644 --- a/common/buffers/src/main/java/io/helidon/common/buffers/CompositeArrayBufferData.java +++ b/common/buffers/src/main/java/io/helidon/common/buffers/CompositeArrayBufferData.java @@ -38,6 +38,18 @@ public BufferData rewind() { @Override public void writeTo(OutputStream out) { + if (data.length == 1) { + BufferData datum = data[0]; + int available = datum.available(); + if (available > 0) { + datum.writeTo(out); + datum.skip(-available); + } + } else { + copy().writeTo(out); + } + + /* for (BufferData datum : data) { if (datum instanceof CompositeBufferData) { datum.writeTo(out); @@ -49,6 +61,7 @@ public void writeTo(OutputStream out) { } } } + */ } @Override diff --git a/common/buffers/src/main/java/io/helidon/common/buffers/CompositeListBufferData.java b/common/buffers/src/main/java/io/helidon/common/buffers/CompositeListBufferData.java index 9957a3911d8..71e651abb52 100644 --- a/common/buffers/src/main/java/io/helidon/common/buffers/CompositeListBufferData.java +++ b/common/buffers/src/main/java/io/helidon/common/buffers/CompositeListBufferData.java @@ -56,6 +56,18 @@ public BufferData rewind() { @Override public void writeTo(OutputStream out) { + if (data.size() == 1) { + BufferData datum = data.get(0); + int available = datum.available(); + if (available > 0) { + datum.writeTo(out); + datum.skip(-available); + } + } else { + copy().writeTo(out); + } + + /* for (BufferData datum : data) { if (datum instanceof CompositeBufferData) { datum.writeTo(out); @@ -67,6 +79,7 @@ public void writeTo(OutputStream out) { } } } + */ } @Override