aboutsummaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorEugene Kliuchnikov <eustas@google.com>2016-11-30 13:36:20 +0100
committerGitHub <noreply@github.com>2016-11-30 13:36:20 +0100
commit396309a52912e171bd4650927b241e6fbd8b5527 (patch)
treed9cf026fd224363ba1eccfcfd3adf0bab764def0 /java
parent5db62dcc9d386579609540cdf8869e95ad334bbd (diff)
downloadbrotli-396309a52912e171bd4650927b241e6fbd8b5527.tar.gz
Update (#470)
* condense generated `static_dict_lut.h` * implement BrotliInputStream.close()
Diffstat (limited to 'java')
-rwxr-xr-xjava/dec/BitReader.java8
-rwxr-xr-xjava/dec/BrotliInputStream.java8
-rwxr-xr-xjava/dec/Decode.java4
-rwxr-xr-xjava/dec/RunningState.java1
-rwxr-xr-xjava/dec/State.java15
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);
+ }
}