From 4c38df39c9181d55ab315eb1b78f5070ecd39dda Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Fri, 1 May 2020 01:13:11 +0100 Subject: [PATCH] improved performances of `net.woggioni.jzstd.ZstdInputStream` --- src/main/java/net/woggioni/jzstd/ZstdInputStream.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/woggioni/jzstd/ZstdInputStream.java b/src/main/java/net/woggioni/jzstd/ZstdInputStream.java index 1c70ae6..80b85a2 100644 --- a/src/main/java/net/woggioni/jzstd/ZstdInputStream.java +++ b/src/main/java/net/woggioni/jzstd/ZstdInputStream.java @@ -15,6 +15,7 @@ public class ZstdInputStream extends InputStream { private final ZSTD_inBuffer input; private final ZSTD_outBuffer output; + private final byte[] buffer; private enum State { AVAILABLE_INPUT, SOURCE_DEPLETED, CTX_FLUSHED @@ -33,6 +34,7 @@ public class ZstdInputStream extends InputStream { this.ctx_owner = ctx_owner; this.input = new ZSTD_inBuffer(inputBufferSize); this.output = new ZSTD_outBuffer(outputBufferSize); + this.buffer = new byte[inputBufferSize]; } public static ZstdInputStream from(InputStream source) { @@ -55,13 +57,14 @@ public class ZstdInputStream extends InputStream { } else if(input.src.position() == input.src.capacity()) { input.src.position(0); } - while (input.src.position() < input.src.capacity()) { - int b = source.read(); - if (b < 0) { + int toRead = input.src.capacity() - input.src.position(); + if(toRead > 0) { + int read = source.read(buffer, 0, toRead); + if(read < 0) { state = State.SOURCE_DEPLETED; break; } - input.src.put((byte) b); + input.src.put(buffer, 0, toRead); } input.pos = zero; input.size = new size_t(input.src.position());