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 c9d33a6cccd..e9899b3366e 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,7 +38,18 @@ public BufferData rewind() { @Override public void writeTo(OutputStream out) { - copy().writeTo(out); + for (BufferData datum : data) { + if (datum.consumed()) { + continue; + } + if (datum instanceof CompositeBufferData) { + datum.writeTo(out); + } else { + int available = datum.available(); + datum.writeTo(out); + datum.skip(-available); + } + } } @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 bf5fcdaefec..7b7d03d8969 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,7 +56,18 @@ public BufferData rewind() { @Override public void writeTo(OutputStream out) { - copy().writeTo(out); + for (BufferData datum : data) { + if (datum.consumed()) { + continue; + } + if (datum instanceof CompositeBufferData) { + datum.writeTo(out); + } else { + int available = datum.available(); + datum.writeTo(out); + datum.skip(-available); + } + } } @Override