模块 java.base

类 CipherInputStream

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

public class CipherInputStream extends FilterInputStream
CipherInputStream 由一个 InputStream 和一个 Cipher 对象组成,因此 read() 方法返回从底层 InputStream 读入但已由 Cipher 对象额外处理的数据。 Cipher 对象必须在被 CipherInputStream 使用之前完全初始化。

例如,如果初始化 Cipher 对象以进行解密,则 CipherInputStream 将尝试读入数据并对其进行解密,然后返回解密数据。

此类严格遵守其祖先类 java.io.FilterInputStreamjava.io.InputStream 的语义,尤其是故障语义。此类具有在其祖先类中指定的那些方法,并覆盖了所有这些方法。此外,此类捕获其祖先类未抛出的所有异常。特别是skip方法会跳过,available方法只统计封装好的Cipher对象处理过的数据。此类可能会捕获 BadPaddingException 以及解密过程中完整性检查失败引发的其他异常。这些异常不会重新抛出,因此可能不会通知客户端完整性检查失败。由于这种行为,此类可能不适合在经过身份验证的操作模式(例如 GCM)中用于解密。需要经过身份验证的加密的应用程序可以直接使用 Cipher API 作为使用此类的替代方法。

对于使用此类的程序员来说,不要使用未在此类中定义或覆盖的方法(例如稍后添加到超类之一的新方法或构造函数)是至关重要的,因为这些方法的设计和实现不太可能考虑过关于 CipherInputStream 的安全影响。

自从:
1.4
参见:
  • 构造方法详细信息

    • CipherInputStream

      public CipherInputStream(InputStream  is, Cipher  c)
      InputStreamCipher 对象构造一个 CipherInputStream
      注意:如果指定的输入流或密码为 null ,则稍后使用时可能会抛出 NullPointerException
      参数:
      is - 待处理的输入流
      c - 一个初始化的 Cipher 对象
    • CipherInputStream

      protected CipherInputStream(InputStream  is)
      在不指定 Cipher 对象的情况下从 InputStream 构造一个 CipherInputStream。这具有使用 NullCipher 构建 CipherInputStream 的效果。
      注意:如果指定的输入流是null,后面使用的时候可能会抛出一个NullPointerException
      参数:
      is - 待处理的输入流
  • 方法详情

    • read

      public int read() throws IOException
      从此输入流中读取下一个字节的数据。值字节作为 int0255 范围内返回。如果因为已到达流的末尾而没有可用字节,则返回值 -1。此方法会阻塞,直到输入数据可用、检测到流结束或抛出异常为止。
      重写:
      read 在类 FilterInputStream
      返回:
      下一个数据字节,如果到达流的末尾则为 -1
      抛出:
      IOException - 如果发生 I/O 错误。
      参见:
    • read

      public int read(byte[] b) throws IOException
      从此输入流中读取最多 b.length 字节的数据到字节数组中。

      InputStreamread方法调用了三个参数的read方法,参数为b0b.length

      重写:
      read 在类 FilterInputStream
      参数:
      b - 读取数据的缓冲区。
      返回:
      读入缓冲区的字节总数,或者 -1 没有更多数据,因为已经到达流的末尾。
      抛出:
      IOException - 如果发生 I/O 错误。
      参见:
    • read

      public int read(byte[] b, int off, int len) throws IOException
      从此输入流中读取最多 len 字节的数据到字节数组中。在某些输入可用之前,此方法会阻塞。如果第一个参数是 null ,则最多读取并丢弃 len 字节。
      重写:
      read 在类 FilterInputStream
      参数:
      b - 读取数据的缓冲区。
      off - 目标数组中的起始偏移量 buf
      len - 读取的最大字节数。
      返回:
      读入缓冲区的字节总数,如果因为已到达流的末尾而没有更多数据,则为 -1
      抛出:
      IOException - 如果发生 I/O 错误。
      参见:
    • skip

      public long skip(long n) throws IOException
      从可从此输入流读取的字节中跳过 n 字节的输入而不阻塞。

      可能会跳过少于请求的字节数。实际跳过的字节数等于 n 或调用 available 的结果,以较小者为准。如果 n 小于零,则不会跳过任何字节。

      返回实际跳过的字节数。

      重写:
      skip 在类 FilterInputStream
      参数:
      n - 要跳过的字节数。
      返回:
      实际跳过的字节数。
      抛出:
      IOException - 如果发生 I/O 错误。
      参见:
    • available

      public int available() throws IOException
      返回可以从该输入流中无阻塞地读取的字节数。 InputStreamavailable 方法返回 0 。这个方法应该被子类重写。
      重写:
      available 在类 FilterInputStream
      返回:
      可以无阻塞地从此输入流中读取的字节数。
      抛出:
      IOException - 如果发生 I/O 错误。
    • close

      public void close() throws IOException
      关闭此输入流并释放与该流关联的所有系统资源。

      CipherInputStreamclose 方法调用其底层输入流的 close 方法。

      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Closeable
      重写:
      close 在类 FilterInputStream
      抛出:
      IOException - 如果发生 I/O 错误。
      参见:
    • markSupported

      public boolean markSupported()
      测试此输入流是否支持 markreset 方法,但它不支持。
      重写:
      markSupported 在类 FilterInputStream
      返回:
      false ,因为此类不支持 markreset 方法。
      参见: