You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2018/04/29 10:11:23 UTC
[1/2] commons-compress git commit: fix whitespace
Repository: commons-compress
Updated Branches:
refs/heads/master 0daa0c9b6 -> eee4d197d
fix whitespace
Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/a5103a8d
Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/a5103a8d
Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/a5103a8d
Branch: refs/heads/master
Commit: a5103a8da17b80fac1e0c671ea143d4a5a6e8962
Parents: 0daa0c9
Author: Stefan Bodewig <bo...@apache.org>
Authored: Sun Apr 29 11:25:28 2018 +0200
Committer: Stefan Bodewig <bo...@apache.org>
Committed: Sun Apr 29 11:25:28 2018 +0200
----------------------------------------------------------------------
.../org/apache/commons/compress/utils/InputStreamStatistics.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/a5103a8d/src/main/java/org/apache/commons/compress/utils/InputStreamStatistics.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/utils/InputStreamStatistics.java b/src/main/java/org/apache/commons/compress/utils/InputStreamStatistics.java
index b53e6f5..569ab36 100644
--- a/src/main/java/org/apache/commons/compress/utils/InputStreamStatistics.java
+++ b/src/main/java/org/apache/commons/compress/utils/InputStreamStatistics.java
@@ -32,7 +32,7 @@ public interface InputStreamStatistics {
long getCompressedCount();
/**
- * @return the amount of decompressed bytes returned by the stream
+ * @return the amount of decompressed bytes returned by the stream
*/
long getUncompressedCount();
}
[2/2] commons-compress git commit: COMPRESS-445 make most
CompressorInputs implement InputStatistics
Posted by bo...@apache.org.
COMPRESS-445 make most CompressorInputs implement InputStatistics
the sole exception is pack200 which is kind of special anyway
Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/eee4d197
Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/eee4d197
Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/eee4d197
Branch: refs/heads/master
Commit: eee4d197d25ad99614cb63445ea71557d6a75c43
Parents: a5103a8
Author: Stefan Bodewig <bo...@apache.org>
Authored: Sun Apr 29 12:09:50 2018 +0200
Committer: Stefan Bodewig <bo...@apache.org>
Committed: Sun Apr 29 12:09:50 2018 +0200
----------------------------------------------------------------------
src/changes/changes.xml | 2 +-
.../compressors/CompressorInputStream.java | 16 ++++++++++++
.../brotli/BrotliCompressorInputStream.java | 18 +++++++++++---
.../bzip2/BZip2CompressorInputStream.java | 8 ------
.../deflate/DeflateCompressorInputStream.java | 17 +++++++++++--
.../Deflate64CompressorInputStream.java | 8 ------
.../gzip/GzipCompressorInputStream.java | 26 ++++++++++++++++----
.../lz4/FramedLZ4CompressorInputStream.java | 17 ++++++++++---
.../AbstractLZ77CompressorInputStream.java | 17 ++++++++++---
.../lzma/LZMACompressorInputStream.java | 19 +++++++++++---
.../compressors/lzw/LZWInputStream.java | 8 ------
.../FramedSnappyCompressorInputStream.java | 20 +++++++++++++--
.../compressors/xz/XZCompressorInputStream.java | 22 ++++++++++++++---
.../zstandard/ZstdCompressorInputStream.java | 15 +++++++++--
14 files changed, 161 insertions(+), 52 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b2a65e8..7341f10 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -62,7 +62,7 @@ The <action> type attribute can be add,update,fix,remove.
</action>
<action issue="COMPRESS-445" type="update" date="2018-04-22"
due-to="Andreas Beeker">
- The streams returned by ZipFile and some other decompressing
+ The streams returned by ZipFile and most other decompressing
streams now provide information about the number of compressed
and uncompressed bytes read so far. This may be used to detect
a ZipBomb if the compression ratio exceeds a certain
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/main/java/org/apache/commons/compress/compressors/CompressorInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/CompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/CompressorInputStream.java
index 8f30860..67de705 100644
--- a/src/main/java/org/apache/commons/compress/compressors/CompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/CompressorInputStream.java
@@ -77,4 +77,20 @@ public abstract class CompressorInputStream extends InputStream {
public long getBytesRead() {
return bytesRead;
}
+
+ /**
+ * Returns the amount of raw or compressed bytes read by the stream.
+ *
+ * <p>This implementation invokes {@link #getBytesRead}.</p>
+ *
+ * <p>Provides half of {@link
+ * org.apache.commons.compress.utils.InputStreamStatistics}
+ * without forcing subclasses to implement the other half.</p>
+ *
+ * @return the amount of decompressed bytes returned by the stream
+ * @since 1.17
+ */
+ public long getUncompressedCount() {
+ return getBytesRead();
+ }
}
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/main/java/org/apache/commons/compress/compressors/brotli/BrotliCompressorInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/brotli/BrotliCompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/brotli/BrotliCompressorInputStream.java
index 5bb104b..5674cb2 100644
--- a/src/main/java/org/apache/commons/compress/compressors/brotli/BrotliCompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/brotli/BrotliCompressorInputStream.java
@@ -21,7 +21,10 @@ import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.compress.compressors.CompressorInputStream;
+import org.apache.commons.compress.utils.CountingInputStream;
import org.apache.commons.compress.utils.IOUtils;
+import org.apache.commons.compress.utils.InputStreamStatistics;
+import org.brotli.dec.BrotliInputStream;
/**
* {@link CompressorInputStream} implementation to decode Brotli encoded stream.
@@ -29,12 +32,14 @@ import org.apache.commons.compress.utils.IOUtils;
*
* @since 1.14
*/
-public class BrotliCompressorInputStream extends CompressorInputStream {
+public class BrotliCompressorInputStream extends CompressorInputStream
+ implements InputStreamStatistics {
- private final org.brotli.dec.BrotliInputStream decIS;
+ private final CountingInputStream countingStream;
+ private final BrotliInputStream decIS;
public BrotliCompressorInputStream(final InputStream in) throws IOException {
- this.decIS = new org.brotli.dec.BrotliInputStream(in);
+ decIS = new BrotliInputStream(countingStream = new CountingInputStream(in));
}
@Override
@@ -91,4 +96,11 @@ public class BrotliCompressorInputStream extends CompressorInputStream {
decIS.reset();
}
+ /**
+ * @since 1.17
+ */
+ @Override
+ public long getCompressedCount() {
+ return countingStream.getBytesRead();
+ }
}
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java
index 54457cf..97f6982 100644
--- a/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java
@@ -190,14 +190,6 @@ public class BZip2CompressorInputStream extends CompressorInputStream
return bin.getBytesRead();
}
- /**
- * @since 1.17
- */
- @Override
- public long getUncompressedCount() {
- return getBytesRead();
- }
-
private void makeMaps() {
final boolean[] inUse = this.data.inUse;
final byte[] seqToUnseq = this.data.seqToUnseq;
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorInputStream.java
index 789336e..0e07284 100644
--- a/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorInputStream.java
@@ -24,19 +24,24 @@ import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;
import org.apache.commons.compress.compressors.CompressorInputStream;
+import org.apache.commons.compress.utils.CountingInputStream;
import org.apache.commons.compress.utils.IOUtils;
+import org.apache.commons.compress.utils.InputStreamStatistics;
/**
* Deflate decompressor.
* @since 1.9
*/
-public class DeflateCompressorInputStream extends CompressorInputStream {
+public class DeflateCompressorInputStream extends CompressorInputStream
+ implements InputStreamStatistics {
+
private static final int MAGIC_1 = 0x78;
private static final int MAGIC_2a = 0x01;
private static final int MAGIC_2b = 0x5e;
private static final int MAGIC_2c = 0x9c;
private static final int MAGIC_2d = 0xda;
+ private final CountingInputStream countingStream;
private final InputStream in;
private final Inflater inflater;
@@ -61,7 +66,7 @@ public class DeflateCompressorInputStream extends CompressorInputStream {
public DeflateCompressorInputStream(final InputStream inputStream,
final DeflateParameters parameters) {
inflater = new Inflater(!parameters.withZlibHeader());
- in = new InflaterInputStream(inputStream, inflater);
+ in = new InflaterInputStream(countingStream = new CountingInputStream(inputStream), inflater);
}
/** {@inheritDoc} */
@@ -103,6 +108,14 @@ public class DeflateCompressorInputStream extends CompressorInputStream {
}
/**
+ * @since 1.17
+ */
+ @Override
+ public long getCompressedCount() {
+ return countingStream.getBytesRead();
+ }
+
+ /**
* Checks if the signature matches what is expected for a zlib / deflated file
* with the zlib header.
*
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStream.java
index a0efd35..883647b 100644
--- a/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStream.java
@@ -110,14 +110,6 @@ public class Deflate64CompressorInputStream extends CompressorInputStream implem
return compressedBytesRead;
}
- /**
- * @since 1.17
- */
- @Override
- public long getUncompressedCount() {
- return getBytesRead();
- }
-
private void closeDecoder() {
closeQuietly(decoder);
decoder = null;
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/main/java/org/apache/commons/compress/compressors/gzip/GzipCompressorInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/gzip/GzipCompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/gzip/GzipCompressorInputStream.java
index a63e4ea..9e05f8b 100644
--- a/src/main/java/org/apache/commons/compress/compressors/gzip/GzipCompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/gzip/GzipCompressorInputStream.java
@@ -33,7 +33,9 @@ import java.util.zip.CRC32;
import org.apache.commons.compress.compressors.CompressorInputStream;
import org.apache.commons.compress.utils.ByteUtils;
import org.apache.commons.compress.utils.CharsetNames;
+import org.apache.commons.compress.utils.CountingInputStream;
import org.apache.commons.compress.utils.IOUtils;
+import org.apache.commons.compress.utils.InputStreamStatistics;
/**
* Input stream that decompresses .gz files.
@@ -71,7 +73,9 @@ import org.apache.commons.compress.utils.IOUtils;
*
* @see "https://tools.ietf.org/html/rfc1952"
*/
-public class GzipCompressorInputStream extends CompressorInputStream {
+public class GzipCompressorInputStream extends CompressorInputStream
+ implements InputStreamStatistics {
+
// Header flags
// private static final int FTEXT = 0x01; // Uninteresting for us
private static final int FHCRC = 0x02;
@@ -80,7 +84,10 @@ public class GzipCompressorInputStream extends CompressorInputStream {
private static final int FCOMMENT = 0x10;
private static final int FRESERVED = 0xE0;
- // Compressed input stream, possibly wrapped in a BufferedInputStream
+ private final CountingInputStream countingStream;
+
+ // Compressed input stream, possibly wrapped in a
+ // BufferedInputStream, always wrapped in countingStream above
private final InputStream in;
// True if decompressing multi member streams.
@@ -147,12 +154,13 @@ public class GzipCompressorInputStream extends CompressorInputStream {
public GzipCompressorInputStream(final InputStream inputStream,
final boolean decompressConcatenated)
throws IOException {
+ countingStream = new CountingInputStream(inputStream);
// Mark support is strictly needed for concatenated files only,
// but it's simpler if it is always available.
- if (inputStream.markSupported()) {
- in = inputStream;
+ if (countingStream.markSupported()) {
+ in = countingStream;
} else {
- in = new BufferedInputStream(inputStream);
+ in = new BufferedInputStream(countingStream);
}
this.decompressConcatenated = decompressConcatenated;
@@ -386,4 +394,12 @@ public class GzipCompressorInputStream extends CompressorInputStream {
this.in.close();
}
}
+
+ /**
+ * @since 1.17
+ */
+ @Override
+ public long getCompressedCount() {
+ return countingStream.getBytesRead();
+ }
}
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorInputStream.java
index 050deeb..c4c4f49 100644
--- a/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorInputStream.java
@@ -26,7 +26,9 @@ import org.apache.commons.compress.compressors.CompressorInputStream;
import org.apache.commons.compress.utils.BoundedInputStream;
import org.apache.commons.compress.utils.ByteUtils;
import org.apache.commons.compress.utils.ChecksumCalculatingInputStream;
+import org.apache.commons.compress.utils.CountingInputStream;
import org.apache.commons.compress.utils.IOUtils;
+import org.apache.commons.compress.utils.InputStreamStatistics;
/**
* CompressorInputStream for the LZ4 frame format.
@@ -37,7 +39,8 @@ import org.apache.commons.compress.utils.IOUtils;
* @since 1.14
* @NotThreadSafe
*/
-public class FramedLZ4CompressorInputStream extends CompressorInputStream {
+public class FramedLZ4CompressorInputStream extends CompressorInputStream
+ implements InputStreamStatistics {
// used by FramedLZ4CompressorOutputStream as well
static final byte[] LZ4_SIGNATURE = new byte[] { //NOSONAR
@@ -67,7 +70,7 @@ public class FramedLZ4CompressorInputStream extends CompressorInputStream {
}
};
- private final InputStream in;
+ private final CountingInputStream in;
private final boolean decompressConcatenated;
private boolean expectBlockChecksum;
@@ -109,7 +112,7 @@ public class FramedLZ4CompressorInputStream extends CompressorInputStream {
* @throws IOException if reading fails
*/
public FramedLZ4CompressorInputStream(InputStream in, boolean decompressConcatenated) throws IOException {
- this.in = in;
+ this.in = new CountingInputStream(in);
this.decompressConcatenated = decompressConcatenated;
init(true);
}
@@ -154,6 +157,14 @@ public class FramedLZ4CompressorInputStream extends CompressorInputStream {
return r;
}
+ /**
+ * @since 1.17
+ */
+ @Override
+ public long getCompressedCount() {
+ return in.getBytesRead();
+ }
+
private void init(boolean firstFrame) throws IOException {
if (readSignature(firstFrame)) {
readFrameDescriptor();
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/main/java/org/apache/commons/compress/compressors/lz77support/AbstractLZ77CompressorInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/lz77support/AbstractLZ77CompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/lz77support/AbstractLZ77CompressorInputStream.java
index 13e5331..8a1371a 100644
--- a/src/main/java/org/apache/commons/compress/compressors/lz77support/AbstractLZ77CompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/lz77support/AbstractLZ77CompressorInputStream.java
@@ -24,7 +24,9 @@ import java.util.Arrays;
import org.apache.commons.compress.compressors.CompressorInputStream;
import org.apache.commons.compress.utils.ByteUtils;
+import org.apache.commons.compress.utils.CountingInputStream;
import org.apache.commons.compress.utils.IOUtils;
+import org.apache.commons.compress.utils.InputStreamStatistics;
/**
* Encapsulates code common to LZ77 decompressors.
@@ -72,7 +74,8 @@ import org.apache.commons.compress.utils.IOUtils;
*
* @since 1.14
*/
-public abstract class AbstractLZ77CompressorInputStream extends CompressorInputStream {
+public abstract class AbstractLZ77CompressorInputStream extends CompressorInputStream
+ implements InputStreamStatistics {
/** Size of the window - must be bigger than the biggest offset expected. */
private final int windowSize;
@@ -94,7 +97,7 @@ public abstract class AbstractLZ77CompressorInputStream extends CompressorInputS
private int readIndex;
/** The underlying stream to read compressed data from */
- private final InputStream in;
+ private final CountingInputStream in;
/** Number of bytes still to be read from the current literal or back-reference. */
private long bytesRemaining;
@@ -129,7 +132,7 @@ public abstract class AbstractLZ77CompressorInputStream extends CompressorInputS
* @throws IOException if reading fails
*/
public AbstractLZ77CompressorInputStream(final InputStream is, int windowSize) throws IOException {
- this.in = is;
+ this.in = new CountingInputStream(is);
this.windowSize = windowSize;
buf = new byte[3 * windowSize];
writeIndex = readIndex = 0;
@@ -187,6 +190,14 @@ public abstract class AbstractLZ77CompressorInputStream extends CompressorInputS
}
/**
+ * @since 1.17
+ */
+ @Override
+ public long getCompressedCount() {
+ return in.getBytesRead();
+ }
+
+ /**
* Used by subclasses to signal the next block contains the given
* amount of literal data.
* @param length the length of the block
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/main/java/org/apache/commons/compress/compressors/lzma/LZMACompressorInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/lzma/LZMACompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/lzma/LZMACompressorInputStream.java
index 13cc5a2..794e3a5 100644
--- a/src/main/java/org/apache/commons/compress/compressors/lzma/LZMACompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/lzma/LZMACompressorInputStream.java
@@ -25,13 +25,18 @@ import org.apache.commons.compress.MemoryLimitException;
import org.tukaani.xz.LZMAInputStream;
import org.apache.commons.compress.compressors.CompressorInputStream;
+import org.apache.commons.compress.utils.CountingInputStream;
import org.apache.commons.compress.utils.IOUtils;
+import org.apache.commons.compress.utils.InputStreamStatistics;
/**
* LZMA decompressor.
* @since 1.6
*/
-public class LZMACompressorInputStream extends CompressorInputStream {
+public class LZMACompressorInputStream extends CompressorInputStream
+ implements InputStreamStatistics {
+
+ private final CountingInputStream countingStream;
private final InputStream in;
/**
@@ -48,7 +53,7 @@ public class LZMACompressorInputStream extends CompressorInputStream {
*/
public LZMACompressorInputStream(final InputStream inputStream)
throws IOException {
- in = new LZMAInputStream(inputStream, -1);
+ in = new LZMAInputStream(countingStream = new CountingInputStream(inputStream), -1);
}
/**
@@ -71,7 +76,7 @@ public class LZMACompressorInputStream extends CompressorInputStream {
public LZMACompressorInputStream(final InputStream inputStream, int memoryLimitInKb)
throws IOException {
try {
- in = new LZMAInputStream(inputStream, memoryLimitInKb);
+ in = new LZMAInputStream(countingStream = new CountingInputStream(inputStream), memoryLimitInKb);
} catch (org.tukaani.xz.MemoryLimitException e) {
//convert to commons-compress exception
throw new MemoryLimitException(e.getMemoryNeeded(), e.getMemoryLimit(), e);
@@ -113,6 +118,14 @@ public class LZMACompressorInputStream extends CompressorInputStream {
}
/**
+ * @since 1.17
+ */
+ @Override
+ public long getCompressedCount() {
+ return countingStream.getBytesRead();
+ }
+
+ /**
* Checks if the signature matches what is expected for an lzma file.
*
* @param signature
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/main/java/org/apache/commons/compress/compressors/lzw/LZWInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/lzw/LZWInputStream.java b/src/main/java/org/apache/commons/compress/compressors/lzw/LZWInputStream.java
index 9cdf680..a5e512c 100644
--- a/src/main/java/org/apache/commons/compress/compressors/lzw/LZWInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/lzw/LZWInputStream.java
@@ -97,14 +97,6 @@ public abstract class LZWInputStream extends CompressorInputStream implements In
}
/**
- * @since 1.17
- */
- @Override
- public long getUncompressedCount() {
- return getBytesRead();
- }
-
- /**
* Read the next code and expand it.
* @return the expanded next code
* @throws IOException on error
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/main/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorInputStream.java
index 56f9294..12974ab 100644
--- a/src/main/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorInputStream.java
@@ -26,7 +26,9 @@ import java.util.Arrays;
import org.apache.commons.compress.compressors.CompressorInputStream;
import org.apache.commons.compress.utils.BoundedInputStream;
import org.apache.commons.compress.utils.ByteUtils;
+import org.apache.commons.compress.utils.CountingInputStream;
import org.apache.commons.compress.utils.IOUtils;
+import org.apache.commons.compress.utils.InputStreamStatistics;
/**
* CompressorInputStream for the framing Snappy format.
@@ -36,7 +38,8 @@ import org.apache.commons.compress.utils.IOUtils;
* @see <a href="https://github.com/google/snappy/blob/master/framing_format.txt">Snappy framing format description</a>
* @since 1.7
*/
-public class FramedSnappyCompressorInputStream extends CompressorInputStream {
+public class FramedSnappyCompressorInputStream extends CompressorInputStream
+ implements InputStreamStatistics {
/**
* package private for tests only.
@@ -58,6 +61,9 @@ public class FramedSnappyCompressorInputStream extends CompressorInputStream {
's', 'N', 'a', 'P', 'p', 'Y'
};
+ private long unreadBytes;
+ private final CountingInputStream countingStream;
+
/** The underlying stream to read compressed data from */
private final PushbackInputStream in;
@@ -120,7 +126,8 @@ public class FramedSnappyCompressorInputStream extends CompressorInputStream {
final int blockSize,
final FramedSnappyDialect dialect)
throws IOException {
- this.in = new PushbackInputStream(in, 1);
+ countingStream = new CountingInputStream(in);
+ this.in = new PushbackInputStream(countingStream, 1);
this.blockSize = blockSize;
this.dialect = dialect;
if (dialect.hasStreamIdentifier()) {
@@ -171,6 +178,14 @@ public class FramedSnappyCompressorInputStream extends CompressorInputStream {
}
/**
+ * @since 1.17
+ */
+ @Override
+ public long getCompressedCount() {
+ return countingStream.getBytesRead() - unreadBytes;
+ }
+
+ /**
* Read from the current chunk into the given array.
*
* @return -1 if there is no current chunk or the number of bytes
@@ -213,6 +228,7 @@ public class FramedSnappyCompressorInputStream extends CompressorInputStream {
endReached = true;
} else if (type == STREAM_IDENTIFIER_TYPE) {
in.unread(type);
+ unreadBytes++;
pushedBackBytes(1);
readStreamIdentifier();
readNextBlock();
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/main/java/org/apache/commons/compress/compressors/xz/XZCompressorInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/xz/XZCompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/xz/XZCompressorInputStream.java
index 74460cb..20d67a1 100644
--- a/src/main/java/org/apache/commons/compress/compressors/xz/XZCompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/xz/XZCompressorInputStream.java
@@ -21,19 +21,24 @@ package org.apache.commons.compress.compressors.xz;
import java.io.IOException;
import java.io.InputStream;
-import org.apache.commons.compress.MemoryLimitException;
import org.tukaani.xz.XZ;
import org.tukaani.xz.SingleXZInputStream;
import org.tukaani.xz.XZInputStream;
+import org.apache.commons.compress.MemoryLimitException;
import org.apache.commons.compress.compressors.CompressorInputStream;
+import org.apache.commons.compress.utils.CountingInputStream;
import org.apache.commons.compress.utils.IOUtils;
+import org.apache.commons.compress.utils.InputStreamStatistics;
/**
* XZ decompressor.
* @since 1.4
*/
-public class XZCompressorInputStream extends CompressorInputStream {
+public class XZCompressorInputStream extends CompressorInputStream
+ implements InputStreamStatistics {
+
+ private final CountingInputStream countingStream;
private final InputStream in;
/**
@@ -123,10 +128,11 @@ public class XZCompressorInputStream extends CompressorInputStream {
public XZCompressorInputStream(InputStream inputStream,
boolean decompressConcatenated, final int memoryLimitInKb)
throws IOException {
+ countingStream = new CountingInputStream(inputStream);
if (decompressConcatenated) {
- in = new XZInputStream(inputStream, memoryLimitInKb);
+ in = new XZInputStream(countingStream, memoryLimitInKb);
} else {
- in = new SingleXZInputStream(inputStream, memoryLimitInKb);
+ in = new SingleXZInputStream(countingStream, memoryLimitInKb);
}
}
@@ -172,4 +178,12 @@ public class XZCompressorInputStream extends CompressorInputStream {
public void close() throws IOException {
in.close();
}
+
+ /**
+ * @since 1.17
+ */
+ @Override
+ public long getCompressedCount() {
+ return countingStream.getBytesRead();
+ }
}
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/eee4d197/src/main/java/org/apache/commons/compress/compressors/zstandard/ZstdCompressorInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/compressors/zstandard/ZstdCompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/zstandard/ZstdCompressorInputStream.java
index 01db0ba..7a47f10 100644
--- a/src/main/java/org/apache/commons/compress/compressors/zstandard/ZstdCompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/zstandard/ZstdCompressorInputStream.java
@@ -23,7 +23,9 @@ import java.io.InputStream;
import com.github.luben.zstd.ZstdInputStream;
import org.apache.commons.compress.compressors.CompressorInputStream;
+import org.apache.commons.compress.utils.CountingInputStream;
import org.apache.commons.compress.utils.IOUtils;
+import org.apache.commons.compress.utils.InputStreamStatistics;
/**
* {@link CompressorInputStream} implementation to decode Zstandard encoded stream.
@@ -31,12 +33,14 @@ import org.apache.commons.compress.utils.IOUtils;
*
* @since 1.16
*/
-public class ZstdCompressorInputStream extends CompressorInputStream {
+public class ZstdCompressorInputStream extends CompressorInputStream
+ implements InputStreamStatistics {
+ private final CountingInputStream countingStream;
private final ZstdInputStream decIS;
public ZstdCompressorInputStream(final InputStream in) throws IOException {
- this.decIS = new ZstdInputStream(in);
+ this.decIS = new ZstdInputStream(countingStream = new CountingInputStream(in));
}
@Override
@@ -93,4 +97,11 @@ public class ZstdCompressorInputStream extends CompressorInputStream {
decIS.reset();
}
+ /**
+ * @since 1.17
+ */
+ @Override
+ public long getCompressedCount() {
+ return countingStream.getBytesRead();
+ }
}