edu.harvard.hul.ois.jhove
Class ChecksumInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by edu.harvard.hul.ois.jhove.ChecksumInputStream
All Implemented Interfaces:
java.io.Closeable

public class ChecksumInputStream
extends java.io.FilterInputStream

A ChecksumInputStream is a FilterInputStream with the added functionality of calculating checksums as it goes. The idea of replacing this with java.util.zip.CheckedInputStream looks very tempting, but we need the byte count, which CheckedInputStream doesn't provide.

Author:
Gary McGath

Field Summary
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
ChecksumInputStream(java.io.InputStream stream, Checksummer cksummer)
          Constructor.
 
Method Summary
 void close()
          Closes the subsumed stream.
 Checksummer getChecksummer()
          Returns the Checksummer object.
 long getNBytes()
          Returns the byte count to date on the stream.
 int read()
          Reads a byte from the subsumed stream, updating the byte count and the checksums.
 int read(byte[] b)
          Reads some number of bytes from the input stream and stores them into the buffer array b.
 int read(byte[] b, int off, int len)
          Reads up to len bytes of data from the input stream into an array of bytes.
 long skip(long n)
          Skips n bytes.
 
Methods inherited from class java.io.FilterInputStream
available, mark, markSupported, reset
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ChecksumInputStream

public ChecksumInputStream(java.io.InputStream stream,
                           Checksummer cksummer)
Constructor.

Parameters:
stream - Stream to be filtered
cksummer - Object to calculate checksum on the bytes as they are read
Method Detail

read

public int read()
         throws java.io.IOException
Reads a byte from the subsumed stream, updating the byte count and the checksums.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

read

public int read(byte[] b)
         throws java.io.IOException
Reads some number of bytes from the input stream and stores them into the buffer array b. The number of bytes actually read is returned as an integer. All bytes read are fed through the checksummer.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
Reads up to len bytes of data from the input stream into an array of bytes. An attempt is made to read as many as len bytes, but a smaller number may be read, possibly zero. The number of bytes actually read is returned as an integer. All bytes read are fed through the checksummer.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

skip

public long skip(long n)
          throws java.io.IOException
Skips n bytes. Reads them and feeds them through the checksummer.

Overrides:
skip in class java.io.FilterInputStream
Throws:
java.io.IOException

close

public void close()
           throws java.io.IOException
Closes the subsumed stream.

Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.FilterInputStream
Throws:
java.io.IOException

getNBytes

public long getNBytes()
Returns the byte count to date on the stream. This returns the number of bytes read. Because of buffering, this is not a reliable indicator of how many bytes have actually been processed.


getChecksummer

public Checksummer getChecksummer()
Returns the Checksummer object.