Repository: commons-compress
Updated Branches:
  refs/heads/COMPRESS-207 3cddfaaff -> 8b1908cbb


COMPRESS-207 also record compressed bytes processed


Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/8b1908cb
Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/8b1908cb
Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/8b1908cb

Branch: refs/heads/COMPRESS-207
Commit: 8b1908cbba7012ed693636926bb1fd2057340d7b
Parents: 3cddfaa
Author: Stefan Bodewig <bode...@apache.org>
Authored: Mon Mar 28 10:37:06 2016 +0200
Committer: Stefan Bodewig <bode...@apache.org>
Committed: Mon Mar 28 10:37:06 2016 +0200

----------------------------------------------------------------------
 .../compressors/CompressionProgressEvent.java   | 31 +++++++++++++-----
 .../compressors/CompressorInputStream.java      |  6 ++--
 .../compressors/CompressorOutputStream.java     |  6 ++--
 .../bzip2/BZip2CompressorInputStream.java       | 34 +++++++++++++-------
 .../compress/compressors/BZip2TestCase.java     | 23 ++++++++-----
 5 files changed, 68 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-compress/blob/8b1908cb/src/main/java/org/apache/commons/compress/compressors/CompressionProgressEvent.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/compress/compressors/CompressionProgressEvent.java
 
b/src/main/java/org/apache/commons/compress/compressors/CompressionProgressEvent.java
index 122d1ca..b4c8943 100644
--- 
a/src/main/java/org/apache/commons/compress/compressors/CompressionProgressEvent.java
+++ 
b/src/main/java/org/apache/commons/compress/compressors/CompressionProgressEvent.java
@@ -27,7 +27,7 @@ import java.util.EventObject;
 public class CompressionProgressEvent extends EventObject {
 
     private final int blockNumber, streamNumber;
-    private final long bytesProcessed;
+    private final long compressedBytesProcessed, uncompressedBytesProcessed;
     
     /**
      * Creates a new event.
@@ -36,14 +36,19 @@ public class CompressionProgressEvent extends EventObject {
      * @param blockNumber number of the block that is getting processed now
      * @param streamNumer number of the stream that is getting
      *        processed now
-     * @param bytesProcessed number of bytes read or written when the event is 
triggered
+     * @param compressedBytesProcessed number of compressed bytes read
+     *        or written when the event is triggered
+     * @param uncompressedBytesProcessed number of uncompressed bytes read
+     *        or written when the event is triggered
      */
     public CompressionProgressEvent(Object source, int blockNumber, int 
streamNumber,
-                                    long bytesProcessed) {
+                                    long compressedBytesProcessed,
+                                    long uncompressedBytesProcessed) {
         super(source);
         this.blockNumber = blockNumber;
         this.streamNumber = streamNumber;
-        this.bytesProcessed = bytesProcessed;
+        this.compressedBytesProcessed = compressedBytesProcessed;
+        this.uncompressedBytesProcessed = uncompressedBytesProcessed;
     }
 
     /**
@@ -69,10 +74,20 @@ public class CompressionProgressEvent extends EventObject {
     }
 
     /**
-     * The number of bytes processed so far.
-     * @return number of bytes read or written when the event is triggered
+     * The number of compressed bytes processed so far.
+     * @return number of compressed bytes read or written when the
+     *         event is triggered
      */
-    public long getBytesProcessed() {
-        return bytesProcessed;
+    public long getCompressedBytesProcessed() {
+        return compressedBytesProcessed;
+    }
+
+    /**
+     * The number of uncompressed bytes processed so far.
+     * @return number of uncompressed bytes read or written when the
+     *         event is triggered
+     */
+    public long getUncompressedBytesProcessed() {
+        return uncompressedBytesProcessed;
     }
 }

http://git-wip-us.apache.org/repos/asf/commons-compress/blob/8b1908cb/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 45ceafe..4d0e46a 100644
--- 
a/src/main/java/org/apache/commons/compress/compressors/CompressorInputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/compressors/CompressorInputStream.java
@@ -108,9 +108,11 @@ public abstract class CompressorInputStream extends 
InputStream {
      * @param blockNumber number of the block that is getting processed now
      * @param streamNumer number of the stream that is getting
      *        processed now
+     * @param compressedBytesRead number of compressed bytes read
      */
-    protected void fireProgress(int blockNumber, int streamNumber) {
-        CompressionProgressEvent e = new CompressionProgressEvent(this, 
blockNumber, streamNumber, getBytesRead());
+    protected void fireProgress(int blockNumber, int streamNumber, long 
compressedBytesRead) {
+        CompressionProgressEvent e = new CompressionProgressEvent(this, 
blockNumber, streamNumber,
+            compressedBytesRead, getBytesRead());
         for (CompressionProgressListener l : listeners) {
             l.notify(e);
         }

http://git-wip-us.apache.org/repos/asf/commons-compress/blob/8b1908cb/src/main/java/org/apache/commons/compress/compressors/CompressorOutputStream.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/compress/compressors/CompressorOutputStream.java
 
b/src/main/java/org/apache/commons/compress/compressors/CompressorOutputStream.java
index b0f7bf9..9dd18a1 100644
--- 
a/src/main/java/org/apache/commons/compress/compressors/CompressorOutputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/compressors/CompressorOutputStream.java
@@ -54,9 +54,11 @@ public abstract class CompressorOutputStream extends 
OutputStream {
      * @param blockNumber number of the block that is getting processed now
      * @param streamNumer number of the stream that is getting
      *        processed now
+     * @param compressedBytesWritten number of compressed bytes written
      */
-    protected void fireProgress(int blockNumber, int streamNumber) {
-        CompressionProgressEvent e = new CompressionProgressEvent(this, 
blockNumber, streamNumber, getBytesWritten());
+    protected void fireProgress(int blockNumber, int streamNumber, long 
compressedBytesWritten) {
+        CompressionProgressEvent e = new CompressionProgressEvent(this, 
blockNumber, streamNumber,
+            compressedBytesWritten, getBytesWritten());
         for (CompressionProgressListener l : listeners) {
             l.notify(e);
         }

http://git-wip-us.apache.org/repos/asf/commons-compress/blob/8b1908cb/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 bcfe577..69f395c 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
@@ -91,6 +91,7 @@ public class BZip2CompressorInputStream extends 
CompressorInputStream implements
     private char su_z;
 
     private int currentBlock, currentStream;
+    private long compressedBytesRead;
 
     /**
      * All memory intensive stuff. This field is initialized by initBlock().
@@ -230,17 +231,25 @@ public class BZip2CompressorInputStream extends 
CompressorInputStream implements
         }
     }
 
+    private int read(InputStream in) throws IOException {
+        int r = in.read();
+        if (r != -1) {
+            compressedBytesRead++;
+        }
+        return r;
+    }
+
     private boolean init(boolean isFirstStream) throws IOException {
         if (null == in) {
             throw new IOException("No InputStream");
         }
 
-        int magic0 = this.in.read();
+        int magic0 = read(this.in);
         if (magic0 == -1 && !isFirstStream) {
             return false;
         }
-        int magic1 = this.in.read();
-        int magic2 = this.in.read();
+        int magic1 = read(this.in);
+        int magic2 = read(this.in);
 
         if (magic0 != 'B' || magic1 != 'Z' || magic2 != 'h') {
             throw new IOException(isFirstStream
@@ -248,7 +257,7 @@ public class BZip2CompressorInputStream extends 
CompressorInputStream implements
                     : "Garbage after a valid BZip2 stream");
         }
 
-        int blockSize = this.in.read();
+        int blockSize = read(this.in);
         if ((blockSize < '1') || (blockSize > '9')) {
             throw new IOException("BZip2 block size is invalid");
         }
@@ -302,6 +311,8 @@ public class BZip2CompressorInputStream extends 
CompressorInputStream implements
             this.currentState = EOF;
             throw new IOException("bad block header");
         } else {
+             // subtract block start magic bytes from compressedBytesRead
+            fireProgress(currentBlock++, currentStream, compressedBytesRead - 
6);
             this.storedBlockCRC = bsGetInt();
             this.blockRandomised = bsR(1) == 1;
 
@@ -313,7 +324,6 @@ public class BZip2CompressorInputStream extends 
CompressorInputStream implements
                 this.data = new Data(this.blockSize100k);
             }
 
-            fireProgress(currentBlock++, currentStream);
             getAndMoveToFrontDecode();
 
             this.crc.initialiseCRC();
@@ -379,7 +389,7 @@ public class BZip2CompressorInputStream extends 
CompressorInputStream implements
         if (bsLiveShadow < n) {
             final InputStream inShadow = this.in;
             do {
-                int thech = inShadow.read();
+                int thech = read(inShadow);
 
                 if (thech < 0) {
                     throw new IOException("unexpected end of stream");
@@ -401,7 +411,7 @@ public class BZip2CompressorInputStream extends 
CompressorInputStream implements
         int bsBuffShadow = this.bsBuff;
 
         if (bsLiveShadow < 1) {
-            int thech = this.in.read();
+            int thech = read(this.in);
 
             if (thech < 0) {
                 throw new IOException("unexpected end of stream");
@@ -646,7 +656,7 @@ public class BZip2CompressorInputStream extends 
CompressorInputStream implements
                     // Inlined:
                     // int zvec = bsR(zn);
                     while (bsLiveShadow < zn) {
-                        final int thech = inShadow.read();
+                        final int thech = read(inShadow);
                         if (thech >= 0) {
                             bsBuffShadow = (bsBuffShadow << 8) | thech;
                             bsLiveShadow += 8;
@@ -662,7 +672,7 @@ public class BZip2CompressorInputStream extends 
CompressorInputStream implements
                     while (zvec > limit_zt[zn]) {
                         zn++;
                         while (bsLiveShadow < 1) {
-                            final int thech = inShadow.read();
+                            final int thech = read(inShadow);
                             if (thech >= 0) {
                                 bsBuffShadow = (bsBuffShadow << 8) | thech;
                                 bsLiveShadow += 8;
@@ -729,7 +739,7 @@ public class BZip2CompressorInputStream extends 
CompressorInputStream implements
                 // Inlined:
                 // int zvec = bsR(zn);
                 while (bsLiveShadow < zn) {
-                    final int thech = inShadow.read();
+                    final int thech = read(inShadow);
                     if (thech >= 0) {
                         bsBuffShadow = (bsBuffShadow << 8) | thech;
                         bsLiveShadow += 8;
@@ -745,7 +755,7 @@ public class BZip2CompressorInputStream extends 
CompressorInputStream implements
                 while (zvec > limit_zt[zn]) {
                     zn++;
                     while (bsLiveShadow < 1) {
-                        final int thech = inShadow.read();
+                        final int thech = read(inShadow);
                         if (thech >= 0) {
                             bsBuffShadow = (bsBuffShadow << 8) | thech;
                             bsLiveShadow += 8;
@@ -779,7 +789,7 @@ public class BZip2CompressorInputStream extends 
CompressorInputStream implements
         while (zvec > limit_zt[zn]) {
             zn++;
             while (bsLiveShadow < 1) {
-                final int thech = inShadow.read();
+                final int thech = read(inShadow);
 
                 if (thech >= 0) {
                     bsBuffShadow = (bsBuffShadow << 8) | thech;

http://git-wip-us.apache.org/repos/asf/commons-compress/blob/8b1908cb/src/test/java/org/apache/commons/compress/compressors/BZip2TestCase.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/compress/compressors/BZip2TestCase.java 
b/src/test/java/org/apache/commons/compress/compressors/BZip2TestCase.java
index e736125..17e6554 100644
--- a/src/test/java/org/apache/commons/compress/compressors/BZip2TestCase.java
+++ b/src/test/java/org/apache/commons/compress/compressors/BZip2TestCase.java
@@ -140,7 +140,8 @@ public final class BZip2TestCase extends AbstractTestCase {
         File inputFile = getFile("COMPRESS-207.bz2");
         FileInputStream fInputStream = new FileInputStream(inputFile);
         final List<Integer> blockNumbers = new ArrayList<Integer>();
-        final List<Long> readPositions = new ArrayList<Long>();
+        final List<Long> uncompressedBytes = new ArrayList<Long>();
+        final List<Long> compressedBytes = new ArrayList<Long>();
         final BZip2CompressorInputStream in = new 
BZip2CompressorInputStream(fInputStream);
 
         CompressionProgressListener blockListener = new 
CompressionProgressListener() {
@@ -148,7 +149,8 @@ public final class BZip2TestCase extends AbstractTestCase {
             public void notify(CompressionProgressEvent e) {
                 assertSame(in, e.getSource());
                 blockNumbers.add(e.getBlockNumber());
-                readPositions.add(e.getBytesProcessed());
+                uncompressedBytes.add(e.getUncompressedBytesProcessed());
+                compressedBytes.add(e.getCompressedBytesProcessed());
             }
         };
         in.addCompressionProgressListener(blockListener);
@@ -158,16 +160,21 @@ public final class BZip2TestCase extends AbstractTestCase 
{
 
         // we miss the initial block event which is triggered by the 
constructor
         assertEquals(4, blockNumbers.size());
-        System.err.println(blockNumbers);
         for (int i = 0; i < 4; i++) {
             assertEquals(i + 1, blockNumbers.get(i).intValue());
         }
 
-        assertEquals(4, readPositions.size());
-        assertEquals(Long.valueOf(899907), readPositions.get(0));
-        assertEquals(Long.valueOf(1799817), readPositions.get(1));
-        assertEquals(Long.valueOf(2699710), readPositions.get(2));
-        assertEquals(Long.valueOf(3599604), readPositions.get(3));
+        assertEquals(4, uncompressedBytes.size());
+        assertEquals(Long.valueOf(899907), uncompressedBytes.get(0));
+        assertEquals(Long.valueOf(1799817), uncompressedBytes.get(1));
+        assertEquals(Long.valueOf(2699710), uncompressedBytes.get(2));
+        assertEquals(Long.valueOf(3599604), uncompressedBytes.get(3));
+
+        assertEquals(4, compressedBytes.size());
+        assertEquals(Long.valueOf(457766), compressedBytes.get(0));
+        assertEquals(Long.valueOf(915639), compressedBytes.get(1));
+        assertEquals(Long.valueOf(1373360), compressedBytes.get(2));
+        assertEquals(Long.valueOf(1831305), compressedBytes.get(3));
     }
 
 }

Reply via email to