org.apache.commons.io.input

## Class MessageDigestCalculatingInputStream

- java.lang.Object
- - java.io.InputStream
  - - java.io.FilterInputStream
    - - org.apache.commons.io.input.ProxyInputStream
      - - org.apache.commons.io.input.ObservableInputStream
        - - org.apache.commons.io.input.MessageDigestCalculatingInputStream

All Implemented Interfaces:
  Closeable, AutoCloseable

    public class MessageDigestCalculatingInputStream
    extends ObservableInputStream

This class is an example for using an `ObservableInputStream`. It creates its own `ObservableInputStream.Observer`, which calculates a checksum using a MessageDigest, for example an MD5 sum. Note: Neither `ObservableInputStream`, nor `MessageDigest`, are thread safe. So is `MessageDigestCalculatingInputStream`.

### Nested Class Summary

Nested Classes
`static class` `MessageDigestCalculatingInputStream.MessageDigestMaintainingObserver` Maintains the message digest.

### Nested classes/interfaces inherited from class org.apache.commons.io.input.ObservableInputStream

`ObservableInputStream.Observer`

### Field Summary

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

`in`

### Constructor Summary

Constructors
Constructor and Description
`MessageDigestCalculatingInputStream(InputStream pStream)` Creates a new instance, which calculates a signature on the given stream, using a `MessageDigest` with the "MD5" algorithm.
`MessageDigestCalculatingInputStream(InputStream pStream, MessageDigest pDigest)` Creates a new instance, which calculates a signature on the given stream, using the given `MessageDigest`.
`MessageDigestCalculatingInputStream(InputStream pStream, String pAlgorithm)` Creates a new instance, which calculates a signature on the given stream, using a `MessageDigest` with the given algorithm.

### Method Summary

All Methods Instance Methods Concrete Methods
`MessageDigest` `getMessageDigest()` Returns the `MessageDigest`, which is being used for generating the checksum.

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

`add, close, consume, getObservers, noteClosed, noteDataByte, noteDataBytes, noteError, noteFinished, read, read, read, remove, removeAllObservers`

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

`afterRead, available, beforeRead, handleIOException, mark, markSupported, reset, skip`

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

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

### Constructor Detail

#### MessageDigestCalculatingInputStream

    public MessageDigestCalculatingInputStream(InputStream pStream,
                                               MessageDigest pDigest)

Creates a new instance, which calculates a signature on the given stream, using the given `MessageDigest`.

Parameters:
  `pStream` - the stream to calculate the message digest for
  `pDigest` - the message digest to use

#### MessageDigestCalculatingInputStream

    public MessageDigestCalculatingInputStream(InputStream pStream,
                                               String pAlgorithm)
                                        throws NoSuchAlgorithmException

Creates a new instance, which calculates a signature on the given stream, using a `MessageDigest` with the given algorithm.

Parameters:
  `pStream` - the stream to calculate the message digest for
  `pAlgorithm` - the name of the algorithm to use
Throws:
  `NoSuchAlgorithmException` - if no Provider supports a MessageDigestSpi implementation for the specified algorithm.

#### MessageDigestCalculatingInputStream

    public MessageDigestCalculatingInputStream(InputStream pStream)
                                        throws NoSuchAlgorithmException

Creates a new instance, which calculates a signature on the given stream, using a `MessageDigest` with the "MD5" algorithm.

Parameters:
  `pStream` - the stream to calculate the message digest for
Throws:
  `NoSuchAlgorithmException` - if no Provider supports a MessageDigestSpi implementation for the specified algorithm.

### Method Detail

#### getMessageDigest

    public MessageDigest getMessageDigest()

Returns the `MessageDigest`, which is being used for generating the checksum. Note: The checksum will only reflect the data, which has been read so far. This is probably not, what you expect. Make sure, that the complete data has been read, if that is what you want. The easiest way to do so is by invoking `ObservableInputStream.consume()`.

Returns:
  the message digest used