- java.lang.Object
-
- java.io.InputStream
-
- java.io.FilterInputStream
-
- javax.crypto.CipherInputStream
-
- 实现的所有接口
-
Closeable
,AutoCloseable
public class CipherInputStream extends FilterInputStream
CipherInputStream由InputStream和Cipher组成,因此read()方法返回从底层InputStream读入但已由Cipher另外处理的数据。 在被CipherInputStream使用之前,必须完全初始化密码。例如,如果初始化密码以进行解密,则CipherInputStream将在返回解密数据之前尝试读入数据并对其进行解密。
该类严格遵守其祖先类java.io.FilterInputStream和java.io.InputStream的语义,尤其是失败语义。 该类具有其祖先类中指定的那些方法,并将它们全部覆盖。 此外,此类捕获其祖先类未抛出的所有异常。 特别是,
skip
方法跳过,available
方法仅计算已封装的密码处理的数据。 此类可能会捕获BadPaddingException以及解密期间失败的完整性检查引发的其他异常。 不会重新抛出这些异常,因此可能不会通知客户端完整性检查失败。 由于此行为,此类可能不适合在经过身份验证的操作模式(例如GCM)中与解密一起使用。 需要经过身份验证的加密的应用程序可以直接使用Cipher API作为使用此类的替代方法。对于使用此类的程序员来说,不要使用未在此类中定义或覆盖的方法(例如稍后添加到其中一个超类中的新方法或构造函数),这一点至关重要,因为这些方法的设计和实现不太可能考虑CipherInputStream的安全影响。
- 从以下版本开始:
- 1.4
- 另请参见:
-
InputStream
,FilterInputStream
,Cipher
,CipherOutputStream
-
-
字段汇总
-
声明的属性在类 java.io.FilterInputStream
in
-
-
构造方法摘要
构造方法 变量 构造器 描述 protected
CipherInputStream(InputStream is)
从InputStream构造CipherInputStream而不指定Cipher。CipherInputStream(InputStream is, Cipher c)
从InputStream和Cipher构造CipherInputStream。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 int
available()
返回可以在不阻塞的情况下从此输入流中读取的字节数。void
close()
关闭此输入流并释放与该流关联的所有系统资源。boolean
markSupported()
测试此输入流是否支持mark
和reset
方法,但不支持。int
read()
从此输入流中读取下一个数据字节。int
read(byte[] b)
从此输入流b.length
最多b.length
个字节的数据读入一个字节数组。int
read(byte[] b, int off, int len)
从此输入流中读取最多len
字节的数据到一个字节数组。long
skip(long n)
从可以从此输入流中读取的字节中跳过n
个字节的输入而不会阻塞。-
声明方法的类 java.io.FilterInputStream
mark, reset
-
声明方法的类 java.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, transferTo
-
-
-
-
构造方法详细信息
-
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
返回,范围为0
至255
。 如果由于已到达流末尾而没有可用字节,则返回值-1
。 此方法将阻塞,直到输入数据可用,检测到流的末尾或抛出异常。- 重写:
-
read
,类FilterInputStream
- 结果
-
数据的下一个字节,如果到达流的末尾
-1
。 - 异常
-
IOException
- 如果发生I / O错误。 - 另请参见:
-
FilterInputStream.in
-
read
public int read(byte[] b) throws IOException
从此输入流b.length
最多b.length
字节的数据读入一个字节数组。该
read
的方法InputStream
调用read
的三个参数方法与参数b
,0
和b.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
个字节。- 重写:
-
read
在FilterInputStream
类 - 参数
-
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
。 子类应该重写此方法。- 重写:
-
available
类FilterInputStream
- 结果
- 可以在不阻塞的情况下从此输入流中读取的字节数。
- 异常
-
IOException
- 如果发生I / O错误。
-
close
public void close() throws IOException
关闭此输入流并释放与该流关联的所有系统资源。close
方法CipherInputStream
调用其底层输入流的close
方法。- Specified by:
-
close
接口AutoCloseable
- Specified by:
-
close
接口Closeable
- 重写:
-
close
,类FilterInputStream
- 异常
-
IOException
- 如果发生I / O错误。 - 另请参见:
-
FilterInputStream.in
-
markSupported
public boolean markSupported()
测试此输入流是否支持mark
和reset
方法,但不支持。- 重写:
-
markSupported
,类FilterInputStream
- 结果
-
false
,因为这个类不支持mark
和reset
方法。 - 另请参见:
-
InputStream.mark(int)
,InputStream.reset()
-
-