diff options
author | Eugene Kliuchnikov <eustas@google.com> | 2016-11-30 13:36:20 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-30 13:36:20 +0100 |
commit | 396309a52912e171bd4650927b241e6fbd8b5527 (patch) | |
tree | d9cf026fd224363ba1eccfcfd3adf0bab764def0 /java | |
parent | 5db62dcc9d386579609540cdf8869e95ad334bbd (diff) | |
download | brotli-396309a52912e171bd4650927b241e6fbd8b5527.zip brotli-396309a52912e171bd4650927b241e6fbd8b5527.tar.gz brotli-396309a52912e171bd4650927b241e6fbd8b5527.tar.bz2 |
Update (#470)
* condense generated `static_dict_lut.h`
* implement BrotliInputStream.close()
Diffstat (limited to 'java')
-rwxr-xr-x | java/dec/BitReader.java | 8 | ||||
-rwxr-xr-x | java/dec/BrotliInputStream.java | 8 | ||||
-rwxr-xr-x | java/dec/Decode.java | 4 | ||||
-rwxr-xr-x | java/dec/RunningState.java | 1 | ||||
-rwxr-xr-x | java/dec/State.java | 15 |
5 files changed, 35 insertions, 1 deletions
diff --git a/java/dec/BitReader.java b/java/dec/BitReader.java index 0cbeed8..b07d1b7 100755 --- a/java/dec/BitReader.java +++ b/java/dec/BitReader.java @@ -159,6 +159,14 @@ class BitReader { fillBitWindow(br); } + static void close(BitReader br) throws IOException { + InputStream is = br.input; + br.input = null; + if (is != null) { + is.close(); + } + } + static void jumpToByteBoundry(BitReader br) { int padding = (64 - br.bitOffset) & 7; if (padding != 0) { diff --git a/java/dec/BrotliInputStream.java b/java/dec/BrotliInputStream.java index f04a47e..92ef15e 100755 --- a/java/dec/BrotliInputStream.java +++ b/java/dec/BrotliInputStream.java @@ -108,6 +108,14 @@ public class BrotliInputStream extends InputStream { * {@inheritDoc} */ @Override + public void close() throws IOException { + State.close(state); + } + + /** + * {@inheritDoc} + */ + @Override public int read() throws IOException { try { if (bufferOffset >= remainingBufferBytes) { diff --git a/java/dec/Decode.java b/java/dec/Decode.java index 569020c..39450c7 100755 --- a/java/dec/Decode.java +++ b/java/dec/Decode.java @@ -7,6 +7,7 @@ package org.brotli.dec; import static org.brotli.dec.RunningState.BLOCK_START; +import static org.brotli.dec.RunningState.CLOSED; import static org.brotli.dec.RunningState.COMPRESSED_BLOCK_START; import static org.brotli.dec.RunningState.COPY_LOOP; import static org.brotli.dec.RunningState.COPY_UNCOMPRESSED; @@ -582,6 +583,9 @@ public final class Decode { if (state.runningState == UNINITIALIZED) { throw new IllegalStateException("Can't decompress until initialized"); } + if (state.runningState == CLOSED) { + throw new IllegalStateException("Can't decompress after close"); + } final BitReader br = state.br; int ringBufferMask = state.ringBufferSize - 1; byte[] ringBuffer = state.ringBuffer; diff --git a/java/dec/RunningState.java b/java/dec/RunningState.java index 7f4dca1..4fe22be 100755 --- a/java/dec/RunningState.java +++ b/java/dec/RunningState.java @@ -21,5 +21,6 @@ enum RunningState { COPY_WRAP_BUFFER, TRANSFORM, FINISHED, + CLOSED, WRITE } diff --git a/java/dec/State.java b/java/dec/State.java index 9ac6ca1..3da3358 100755 --- a/java/dec/State.java +++ b/java/dec/State.java @@ -7,8 +7,10 @@ package org.brotli.dec; import static org.brotli.dec.RunningState.BLOCK_START; +import static org.brotli.dec.RunningState.CLOSED; import static org.brotli.dec.RunningState.UNINITIALIZED; +import java.io.IOException; import java.io.InputStream; final class State { @@ -93,7 +95,7 @@ final class State { */ static void setInput(State state, InputStream input) { if (state.runningState != UNINITIALIZED) { - throw new IllegalStateException("State is MUST be uninitialized"); + throw new IllegalStateException("State MUST be uninitialized"); } BitReader.init(state.br, input); int windowBits = decodeWindowBits(state.br); @@ -104,4 +106,15 @@ final class State { state.maxBackwardDistance = state.maxRingBufferSize - 16; state.runningState = BLOCK_START; } + + static void close(State state) throws IOException { + if (state.runningState == UNINITIALIZED) { + throw new IllegalStateException("State MUST be initialized"); + } + if (state.runningState == CLOSED) { + return; + } + state.runningState = CLOSED; + BitReader.close(state.br); + } } |