FileDocCategorySizeDatePackage
CountingInputStream.javaAPI DocAndroid 1.5 API6341Wed May 06 22:42:46 BST 2009org.apache.commons.io.input

CountingInputStream

public class CountingInputStream extends ProxyInputStream
A decorating input stream that counts the number of bytes that have passed through the stream so far.

A typical use case would be during debugging, to ensure that data is being read as expected.

author
Marcelo Liberato
version
$Id: CountingInputStream.java 471628 2006-11-06 04:06:45Z bayard $

Fields Summary
private long
count
The count of bytes that have passed.
Constructors Summary
public CountingInputStream(InputStream in)
Constructs a new CountingInputStream.

param
in the InputStream to delegate to

        super(in);
    
Methods Summary
public synchronized longgetByteCount()
The number of bytes that have passed through this stream.

NOTE: This method is an alternative for getCount() and was added because that method returns an integer which will result in incorrect count for files over 2GB.

return
the number of bytes accumulated
since
Commons IO 1.3

        return this.count;
    
public synchronized intgetCount()
The number of bytes that have passed through this stream.

NOTE: From v1.3 this method throws an ArithmeticException if the count is greater than can be expressed by an int. See {@link #getByteCount()} for a method using a long.

return
the number of bytes accumulated
throws
ArithmeticException if the byte count is too large

        long result = getByteCount();
        if (result > Integer.MAX_VALUE) {
            throw new ArithmeticException("The byte count " + result + " is too large to be converted to an int");
        }
        return (int) result;
    
public intread(byte[] b)
Reads a number of bytes into the byte array, keeping count of the number read.

param
b the buffer into which the data is read, not null
return
the total number of bytes read into the buffer, -1 if end of stream
throws
IOException if an I/O error occurs
see
java.io.InputStream#read(byte[])

        int found = super.read(b);
        this.count += (found >= 0) ? found : 0;
        return found;
    
public intread(byte[] b, int off, int len)
Reads a number of bytes into the byte array at a specific offset, keeping count of the number read.

param
b the buffer into which the data is read, not null
param
off the start offset in the buffer
param
len the maximum number of bytes to read
return
the total number of bytes read into the buffer, -1 if end of stream
throws
IOException if an I/O error occurs
see
java.io.InputStream#read(byte[], int, int)

        int found = super.read(b, off, len);
        this.count += (found >= 0) ? found : 0;
        return found;
    
public intread()
Reads the next byte of data adding to the count of bytes received if a byte is successfully read.

return
the byte read, -1 if end of stream
throws
IOException if an I/O error occurs
see
java.io.InputStream#read()

        int found = super.read();
        this.count += (found >= 0) ? 1 : 0;
        return found;
    
public synchronized longresetByteCount()
Set the byte count back to 0.

NOTE: This method is an alternative for resetCount() and was added because that method returns an integer which will result in incorrect count for files over 2GB.

return
the count previous to resetting
since
Commons IO 1.3

        long tmp = this.count;
        this.count = 0;
        return tmp;
    
public synchronized intresetCount()
Set the byte count back to 0.

NOTE: From v1.3 this method throws an ArithmeticException if the count is greater than can be expressed by an int. See {@link #resetByteCount()} for a method using a long.

return
the count previous to resetting
throws
ArithmeticException if the byte count is too large

        long result = resetByteCount();
        if (result > Integer.MAX_VALUE) {
            throw new ArithmeticException("The byte count " + result + " is too large to be converted to an int");
        }
        return (int) result;
    
public longskip(long length)
Skips the stream over the specified number of bytes, adding the skipped amount to the count.

param
length the number of bytes to skip
return
the actual number of bytes skipped
throws
IOException if an I/O error occurs
see
java.io.InputStream#skip(long)

        final long skip = super.skip(length);
        this.count += skip;
        return skip;