aboutsummaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorEugene Kliuchnikov <eustas@google.com>2018-06-09 11:17:13 +0200
committerGitHub <noreply@github.com>2018-06-09 11:17:13 +0200
commit8544ae858d87056c8dac55713ffe148d9c60eb93 (patch)
tree9e5da54cb72934b5998e1c460c50faf7f3b2c0a3 /java
parent1e7ea1d8e61b7cd51149a2dd491bc86ff8ef460c (diff)
downloadbrotli-8544ae858d87056c8dac55713ffe148d9c60eb93.zip
brotli-8544ae858d87056c8dac55713ffe148d9c60eb93.tar.gz
brotli-8544ae858d87056c8dac55713ffe148d9c60eb93.tar.bz2
Update (#680)
* fix MSVC warnings * cleanups
Diffstat (limited to 'java')
-rw-r--r--java/org/brotli/wrapper/dec/BrotliInputStream.java11
-rw-r--r--java/org/brotli/wrapper/dec/Decoder.java6
2 files changed, 16 insertions, 1 deletions
diff --git a/java/org/brotli/wrapper/dec/BrotliInputStream.java b/java/org/brotli/wrapper/dec/BrotliInputStream.java
index 76bcf1d..26f7a82 100644
--- a/java/org/brotli/wrapper/dec/BrotliInputStream.java
+++ b/java/org/brotli/wrapper/dec/BrotliInputStream.java
@@ -53,7 +53,16 @@ public class BrotliInputStream extends InputStream {
if (decoder.closed) {
throw new IOException("read after close");
}
- if (decoder.decode() == -1) {
+ int decoded;
+ // Iterate until at leat one byte is decoded, or EOF reached.
+ while (true) {
+ decoded = decoder.decode();
+ if (decoded != 0) {
+ break;
+ }
+ }
+
+ if (decoded == -1) {
return -1;
}
return decoder.buffer.get() & 0xFF;
diff --git a/java/org/brotli/wrapper/dec/Decoder.java b/java/org/brotli/wrapper/dec/Decoder.java
index 0326403..548c14d 100644
--- a/java/org/brotli/wrapper/dec/Decoder.java
+++ b/java/org/brotli/wrapper/dec/Decoder.java
@@ -15,6 +15,7 @@ import java.util.ArrayList;
* Base class for InputStream / Channel implementations.
*/
public class Decoder {
+ private static final ByteBuffer EMPTY_BUFER = ByteBuffer.allocate(0);
private final ReadableByteChannel source;
private final DecoderJNI.Wrapper decoder;
ByteBuffer buffer;
@@ -87,6 +88,11 @@ public class Decoder {
if (bytesRead == -1) {
fail("unexpected end of input");
}
+ if (bytesRead == 0) {
+ // No input data is currently available.
+ buffer = EMPTY_BUFER;
+ return 0;
+ }
decoder.push(bytesRead);
break;