org.apache.commons.io.input

## Class MessageDigestInputStream

- 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.MessageDigestInputStream

- All Implemented Interfaces:
    Closeable, AutoCloseable

      public final class MessageDigestInputStream
      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, a SHA-512 sum.

  To build an instance, use `MessageDigestInputStream.Builder`.

  See the MessageDigest section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard algorithm names.

  You must specify a message digest algorithm name or instance.

  Note: Neither `ObservableInputStream`, nor `MessageDigest`, are thread safe, so is `MessageDigestInputStream`.

  See Also:
    `MessageDigestInputStream.Builder`

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `MessageDigestInputStream.Builder` Builds new `MessageDigestInputStream`.
    `static class` | `MessageDigestInputStream.MessageDigestMaintainingObserver` Maintains the message digest.

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

      `ObservableInputStream.AbstractBuilder<T extends ObservableInputStream.AbstractBuilder<T>>, ObservableInputStream.Observer`

  - ### Field Summary

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

      `in`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static MessageDigestInputStream.Builder` | `builder()` Constructs a new `MessageDigestInputStream.Builder`.
    `MessageDigest` | `getMessageDigest()` Gets the `MessageDigest`, which is being used for generating the checksum, never null.

    - ### 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, checkOpen, handleIOException, isClosed, mark, markSupported, reset, setReference, skip, unwrap`

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

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

- - ### Method Detail

    - #### builder

          public static MessageDigestInputStream.Builder builder()

      Constructs a new `MessageDigestInputStream.Builder`.
      Returns:
        a new `MessageDigestInputStream.Builder`.

    - #### getMessageDigest

          public MessageDigest getMessageDigest()

      Gets the `MessageDigest`, which is being used for generating the checksum, never null.

      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, never null.