Package org.apache.commons.io.input

# Class CountingInputStream

java.lang.Object
java.io.InputStream
java.io.FilterInputStream
org.apache.commons.io.input.ProxyInputStream
org.apache.commons.io.input.CountingInputStream

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`

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.

- ## Field Summary

  ### Fields inherited from class java.io.FilterInputStream

  `in`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `CountingInputStream(InputStream in)`
  Constructs a new CountingInputStream.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected void`
  `afterRead(int n)`
  Adds the number of read bytes to the count.
  `long`
  `getByteCount()`
  Gets number of bytes that have passed through this stream.
  `int`
  `getCount()`
  Gets number of bytes that have passed through this stream.
  `long`
  `resetByteCount()`
  Resets the byte count back to 0.
  `int`
  `resetCount()`
  Resets the byte count back to 0.
  `long`
  `skip(long length)`
  Skips the stream over the specified number of bytes, adding the skipped amount to the count.

  ### Methods inherited from class org.apache.commons.io.input.ProxyInputStream

  `available, beforeRead, close, handleIOException, mark, markSupported, read, read, read, reset`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### CountingInputStream

    public CountingInputStream(InputStream in)
    Constructs a new CountingInputStream.
    Parameters:
      `in` - the InputStream to delegate to

- ## Method Details

  - ### afterRead

    protected void afterRead(int n)
    Adds the number of read bytes to the count.
    Overrides:
      `afterRead` in class `ProxyInputStream`
    Parameters:
      `n` - number of bytes read, or -1 if no more bytes are available
    Since:
      2.0

  - ### getByteCount

    public long getByteCount()
    Gets 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.

    Returns:
      the number of bytes accumulated
    Since:
      1.3

  - ### getCount

    public int getCount()
    Gets 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 `getByteCount()` for a method using a `long`.

    Returns:
      the number of bytes accumulated
    Throws:
      `ArithmeticException` - if the byte count is too large

  - ### resetByteCount

    public long resetByteCount()
    Resets 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.

    Returns:
      the count previous to resetting
    Since:
      1.3

  - ### resetCount

    public int resetCount()
    Resets 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 `resetByteCount()` for a method using a `long`.

    Returns:
      the count previous to resetting
    Throws:
      `ArithmeticException` - if the byte count is too large

  - ### skip

    public long skip(long length) throws IOException
    Skips the stream over the specified number of bytes, adding the skipped amount to the count.
    Overrides:
      `skip` in class `ProxyInputStream`
    Parameters:
      `length` - the number of bytes to skip
    Returns:
      the actual number of bytes skipped
    Throws:
      `IOException` - if an I/O error occurs.
    See Also:
      - `InputStream.skip(long)`