diff --git a/src/main/java/org/xerial/snappy/SnappyInputStream.java b/src/main/java/org/xerial/snappy/SnappyInputStream.java index baca10a..30e482c 100755 --- a/src/main/java/org/xerial/snappy/SnappyInputStream.java +++ b/src/main/java/org/xerial/snappy/SnappyInputStream.java @@ -176,7 +176,7 @@ public class SnappyInputStream extends InputStream @Override public int read() throws IOException { if (uncompressedCursor < uncompressedLimit) { - return uncompressed[uncompressedCursor++]; + return uncompressed[uncompressedCursor++] & 0xFF; } else { if (hasNextChunk()) diff --git a/src/test/java/org/xerial/snappy/CalgaryTest.java b/src/test/java/org/xerial/snappy/CalgaryTest.java index 4457a2e..1f98af2 100755 --- a/src/test/java/org/xerial/snappy/CalgaryTest.java +++ b/src/test/java/org/xerial/snappy/CalgaryTest.java @@ -91,4 +91,28 @@ public class CalgaryTest } } + @Test + public void byteWiseRead() throws Exception { + for (String f : files) { + byte[] orig = readFile("testdata/calgary/" + f); + + ByteArrayOutputStream compressedBuf = new ByteArrayOutputStream(); + SnappyOutputStream out = new SnappyOutputStream(compressedBuf); + out.write(orig); + out.close(); + + SnappyInputStream in = new SnappyInputStream(new ByteArrayInputStream(compressedBuf.toByteArray())); + byte[] uncompressed = new byte[orig.length]; + int cursor = 0; + for (;;) { + int b = in.read(); + if (b == -1) + break; + uncompressed[cursor++] = (byte) b; + } + assertEquals(orig.length, cursor); + assertArrayEquals(orig, uncompressed); + } + } + }