Module java.base
Package java.security

Class DigestInputStream

所有已实现的接口:
Closeable, AutoCloseable

public class DigestInputStream extends FilterInputStream
一个透明流,使用通过流传递的位更新关联的消息摘要。

要完成消息摘要计算,请在调用此摘要输入流的一个read方法后,调用关联消息摘要上的digest方法之一。

可以打开或关闭此流(请参见on)。当打开时,调用read方法之一会导致消息摘要更新。但当关闭时,消息摘要不会更新。默认情况下,流是打开的。

请注意,摘要对象只能计算一个摘要(请参见MessageDigest),因此为了计算中间摘要,调用者应保留摘要对象的句柄,并为要计算的每个摘要克隆它,保持原始摘要不变。

实现注意:
此实现仅在打开时使用实际从输入流读取的数据更新消息摘要。这包括各种read方法,transferToreadAllBytesreadNBytes。请注意,skip方法绕过的数据将被忽略。另一方面,如果底层流支持markreset方法,并且在reset后再次读取相同数据,则消息摘要将再次更新。
自 JDK 版本:
1.2
参见:
  • Field Details

    • digest

      protected MessageDigest digest
      与此流关联的消息摘要。
  • Constructor Details

    • DigestInputStream

      public DigestInputStream(InputStream stream, MessageDigest digest)
      使用指定的输入流和消息摘要创建摘要输入流。
      参数:
      stream - 输入流。
      digest - 要与此流关联的消息摘要。
  • Method Details

    • getMessageDigest

      public MessageDigest getMessageDigest()
      返回与此流关联的消息摘要。
      返回:
      与此流关联的消息摘要。
      参见:
    • setMessageDigest

      public void setMessageDigest(MessageDigest digest)
      将指定的消息摘要与此流关联。
      参数:
      digest - 要与此流关联的消息摘要。
      参见:
    • read

      public int read() throws IOException
      读取一个字节,并更新消息摘要(如果摘要功能已打开)。也就是说,此方法从输入流中读取一个字节,阻塞直到实际读取字节。如果摘要功能已打开(请参见on),则此方法将调用与此流关联的消息摘要的update,传递读取的字节。
      覆盖:
      read 在类 FilterInputStream
      返回:
      读取的字节。
      抛出:
      IOException - 如果发生 I/O 错误。
      参见:
    • read

      public int read(byte[] b, int off, int len) throws IOException
      读取到字节数组中,并更新消息摘要(如果摘要功能已打开)。也就是说,此方法从输入流中最多读取len字节到数组b中,从偏移量off开始。此方法将阻塞,直到实际读取数据。如果摘要功能已打开(请参见on),则此方法将调用与此流关联的消息摘要的update,传递数据。
      覆盖:
      read 在类 FilterInputStream
      参数:
      b - 要读取数据的数组。
      off - 数据应放置在b中的起始偏移量。
      len - 从输入流中读取到数组b中的最大字节数,从偏移量off开始。
      返回:
      实际读取的字节数。如果在读取len字节之前到达流的末尾,则此值小于len。如果在调用时已到达流的末尾,则返回-1,表示未读取任何字节。
      抛出:
      IOException - 如果发生 I/O 错误。
      参见:
    • on

      public void on(boolean on)
      打开或关闭摘要功能。默认为打开。当打开时,调用read方法之一会导致消息摘要更新。但当关闭时,消息摘要不会更新。
      参数:
      on - true表示打开摘要功能,false表示关闭。
    • toString

      public String toString()
      打印此摘要输入流及其关联的消息摘要对象的字符串表示形式。
      覆盖:
      toString 在类 Object
      返回:
      对象的字符串表示形式。