模块  java.base
软件包  javax.crypto

Class CipherInputStream

  • 实现的所有接口
    CloseableAutoCloseable

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

    例如,如果初始化密码以进行解密,则CipherInputStream将在返回解密数据之前尝试读入数据并对其进行解密。

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

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

    从以下版本开始:
    1.4
    另请参见:
    InputStreamFilterInputStreamCipherCipherOutputStream
    • 构造方法详细信息

      • CipherInputStream

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

        protected CipherInputStream​(InputStream is)
        从InputStream构造CipherInputStream而不指定Cipher。 这具有使用NullCipher构造CipherInputStream的效果。
        注意:如果指定的输入流为null,则在使用它时可能会抛出NullPointerException。
        参数
        is - 待处理的输入流
    • 方法详细信息

      • read

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

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

        read的方法InputStream调用read的三个参数方法与参数b0b.length

        重写:
        read在类 FilterInputStream
        参数
        b - 读取数据的缓冲区。
        结果
        读入缓冲区的总字节数,或 -1是没有更多数据,因为已到达流的末尾。
        异常
        IOException - 如果发生I / O错误。
        另请参见:
        InputStream.read(byte[], int, int)
      • read

        public int read​(byte[] b,                int off,                int len)         throws IOException
        从此输入流len最多len字节的数据读入一个字节数组。 此方法将阻塞,直到某些输入可用。 如果第一个参数是null, ,则读取并丢弃最多len个字节。
        重写:
        readFilterInputStream
        参数
        b - 读取数据的缓冲区。
        off - 目标阵列 buf的起始偏移量
        len - 读取的最大字节数。
        结果
        读入缓冲区的总字节数,如果由于已到达流末尾而没有更多数据, -1
        异常
        IOException - 如果发生I / O错误。
        另请参见:
        InputStream.read()
      • skip

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

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

        返回跳过的实际字节数。

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

        public int available()              throws IOException
        返回可以在不阻塞的情况下从此输入流中读取的字节数。 available的方法InputStream返回0 子类应该重写此方法。
        重写:
        availableFilterInputStream
        结果
        可以在不阻塞的情况下从此输入流中读取的字节数。
        异常
        IOException - 如果发生I / O错误。