Author: bodewig Date: Mon Aug 15 11:30:14 2011 New Revision: 1157782 URL: http://svn.apache.org/viewvc?rev=1157782&view=rev Log: DumpArchiveInputStream didn't count bytes read. COMPRESS-132
Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java?rev=1157782&r1=1157781&r2=1157782&view=diff ============================================================================== --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java (original) +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java Mon Aug 15 11:30:14 2011 @@ -21,6 +21,7 @@ package org.apache.commons.compress.arch import org.apache.commons.compress.archivers.ArchiveException; import org.apache.commons.compress.archivers.ArchiveInputStream; +import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; @@ -71,7 +72,7 @@ public class DumpArchiveInputStream exte * @throws Exception */ public DumpArchiveInputStream(InputStream is) throws ArchiveException { - this.raw = new TapeInputStream(is); + this.raw = new TapeInputStream(new CountingStream(is)); this.hasHitEOF = false; try { @@ -482,4 +483,30 @@ outer: return DumpArchiveConstants.NFS_MAGIC == DumpArchiveUtil.convert32(buffer, 7); } + + private class CountingStream extends FilterInputStream { + private CountingStream(final InputStream in) { + super(in); + } + @Override + public int read() throws IOException { + int r = in.read(); + if (r >= 0) { + count(1); + } + return r; + } + @Override + public int read(byte[] b) throws IOException { + return read(b, 0, b.length); + } + @Override + public int read(byte[] b, int off, int len) throws IOException { + int r = in.read(b, off, len); + if (r >= 0) { + count(r); + } + return r; + } + } }