Class CountingInputStream

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.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 
      Modifier and Type Field Description
      private long count
      The count of bytes that have passed.
      • Fields inherited from class java.io.FilterInputStream

        in
    • Constructor Summary

      Constructors 
      Constructor Description
      CountingInputStream​(java.io.InputStream in)
      Constructs a new CountingInputStream.
    • Field Detail

      • count

        private long count
        The count of bytes that have passed.
    • Constructor Detail

      • CountingInputStream

        public CountingInputStream​(java.io.InputStream in)
        Constructs a new CountingInputStream.
        Parameters:
        in - the InputStream to delegate to
    • Method Detail

      • 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:
        java.lang.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:
        java.lang.ArithmeticException - if the byte count is too large
      • skip

        public long skip​(long length)
                  throws java.io.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:
        java.io.IOException - if an I/O error occurs.
        See Also:
        InputStream.skip(long)