package com.limegroup.gnutella.util; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; /** * InputStream that counts the number of bytes succesfully read or skipped. */ public final class CountingInputStream extends FilterInputStream { private int _count = 0; public CountingInputStream (final InputStream in) { super(in); } public int read() throws IOException { int read = super.read(); _count++; return read; } public int read(byte[] b, int off, int len) throws IOException { int read; try { read = super.read(b, off, len); } catch(ArrayIndexOutOfBoundsException aioob) { // happens. throw new IOException(); } _count += read; return read; } public long skip(long n) throws IOException { long skipped = super.skip(n); _count += (int)skipped; return skipped; } public void close() throws IOException { in.close(); } public int getAmountRead() { return _count; } public void clearAmountRead() { _count = 0; } } // class