From 72383d990c45fb6f87c1988b410ba144ace86068 Mon Sep 17 00:00:00 2001 From: "Taro L. Saito" Date: Tue, 25 Oct 2011 10:39:27 +0900 Subject: [PATCH] Fixes issue 34 Implement available() method --- .../org/xerial/snappy/SnappyInputStream.java | 17 ++++++++++ .../xerial/snappy/SnappyInputStreamTest.java | 32 +++++++++++++++---- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/xerial/snappy/SnappyInputStream.java b/src/main/java/org/xerial/snappy/SnappyInputStream.java index 3546838..3adafc8 100755 --- a/src/main/java/org/xerial/snappy/SnappyInputStream.java +++ b/src/main/java/org/xerial/snappy/SnappyInputStream.java @@ -387,4 +387,21 @@ public class SnappyInputStream extends InputStream } } + /* (non-Javadoc) + * @see java.io.InputStream#available() + */ + @Override + public int available() throws IOException { + if (uncompressedCursor < uncompressedLimit) { + return uncompressedLimit - uncompressedCursor; + } + else { + if (hasNextChunk()) { + return uncompressedLimit - uncompressedCursor; + } + else { + return 0; + } + } + } } diff --git a/src/test/java/org/xerial/snappy/SnappyInputStreamTest.java b/src/test/java/org/xerial/snappy/SnappyInputStreamTest.java index 303f9fb..6f3bde9 100755 --- a/src/test/java/org/xerial/snappy/SnappyInputStreamTest.java +++ b/src/test/java/org/xerial/snappy/SnappyInputStreamTest.java @@ -48,13 +48,18 @@ public class SnappyInputStreamTest } public static byte[] readFully(InputStream input) throws IOException { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - byte[] buf = new byte[4096]; - for (int readBytes = 0; (readBytes = input.read(buf)) != -1;) { - out.write(buf, 0, readBytes); + try { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] buf = new byte[4096]; + for (int readBytes = 0; (readBytes = input.read(buf)) != -1;) { + out.write(buf, 0, readBytes); + } + out.flush(); + return out.toByteArray(); + } + finally { + input.close(); } - out.flush(); - return out.toByteArray(); } public static byte[] biteWiseReadFully(InputStream input) throws IOException { @@ -107,6 +112,21 @@ public class SnappyInputStreamTest assertEquals(orig.length, uncompressed.length); assertArrayEquals(orig, uncompressed); + + } + + @Test + public void available() throws Exception { + byte[] orig = readResourceFile("testdata/calgary/paper6"); + byte[] compressed = Snappy.compress(orig); + + SnappyInputStream in = new SnappyInputStream(new ByteArrayInputStream(compressed)); + byte[] buf = new byte[4]; + for (int readBytes = 0; (readBytes = in.read(buf)) != -1;) { + assertTrue(in.available() >= 0); + } + assertTrue(in.available() == 0); + in.close(); } }