java.lang.Object
java.io.InputStream
java.io.FilterInputStream
javax.crypto.CipherInputStream
- 所有已实现的接口:
-
Closeable
,AutoCloseable
一个
CipherInputStream
由一个InputStream
和一个Cipher
对象组成,以便read()
方法返回从底层InputStream
读取的数据,但这些数据还经过Cipher
对象的额外处理。在被CipherInputStream
使用之前,Cipher
对象必须完全初始化。
例如,如果Cipher
对象被初始化用于解密,CipherInputStream
将尝试读取数据并解密它们,然后返回解密后的数据。
这个类严格遵循其祖先类java.io.FilterInputStream
和java.io.InputStream
的语义,特别是失败的语义。这个类恰好具有其祖先类中指定的那些方法,并对它们进行了覆盖。此外,这个类捕获了所有不是由其祖先类抛出的异常。特别是,skip
方法跳过,available
方法仅计算已被封装的Cipher
对象处理的数据。这个类可能会捕获由解密期间失败的完整性检查抛出的BadPaddingException
和其他异常。这些异常不会被重新抛出,因此客户端可能不会被告知完整性检查失败。由于这种行为,这个类可能不适合在受身份验证模式(例如GCM)下进行解密的应用。需要经过身份验证的加密的应用程序可以直接使用Cipher
API作为使用这个类的替代方法。
对于使用这个类的程序员来说,重要的是不要使用在这个类中未定义或未覆盖的方法(例如稍后添加到其中一个超类的新方法或构造函数),因为这些方法的设计和实现不太可能考虑到CipherInputStream
的安全影响。
- 自从:
- 1.4
- 参见:
-
Field Summary
Fields declared in class java.io.FilterInputStream
in
-
Constructor Summary
ModifierConstructorDescriptionprotected
从一个InputStream
构造一个CipherInputStream
,而不指定Cipher
对象。CipherInputStream
(InputStream is, Cipher c) 从一个InputStream
和一个Cipher
对象构造一个CipherInputStream
。 -
Method Summary
Modifier and TypeMethodDescriptionint
返回可以从这个输入流中读取而不阻塞的字节数。void
close()
关闭这个输入流并释放与流相关的任何系统资源。boolean
测试这个输入流是否支持mark
和reset
方法,它不支持。int
read()
从这个输入流中读取下一个字节的数据。int
read
(byte[] b) 从这个输入流中读取最多b.length
字节的数据到一个字节数组中。int
read
(byte[] b, int off, int len) 从这个输入流中读取最多len
字节的数据到一个字节数组中。long
skip
(long n) 跳过可以从这个输入流中读取而不阻塞的字节中的n
个字节。Methods declared in class java.io.FilterInputStream
mark, reset
Methods declared in class java.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, skipNBytes, transferTo
-
Constructor Details
-
CipherInputStream
从一个InputStream
和一个Cipher
对象构造一个CipherInputStream
。
注意:如果指定的输入流或密码是null
,则稍后在使用它们时可能会抛出NullPointerException
。- 参数:
-
is
- 要处理的输入流 -
c
- 一个已初始化的Cipher
对象
-
CipherInputStream
从一个InputStream
构造一个CipherInputStream
,而不指定Cipher
对象。这将导致使用NullCipher
构造一个CipherInputStream
。
注意:如果指定的输入流是null
,则稍后在使用它时可能会抛出NullPointerException
。- 参数:
-
is
- 要处理的输入流
-
-
Method Details
-
read
从这个输入流中读取下一个字节的数据。值字节作为int
在范围0
到255
返回。如果没有字节可用,因为已到达流的末尾,则返回值-1
。此方法将阻塞,直到有输入数据可用,检测到流的末尾,或抛出异常。- 覆盖:
-
read
在类FilterInputStream
- 返回:
-
下一个数据字节,如果到达流的末尾则返回
-1
。 - 抛出:
-
IOException
- 如果发生I/O错误。 - 参见:
-
read
从这个输入流中读取最多b.length
字节的数据到一个字节数组中。InputStream
的read
方法调用带有参数b
、0
和b.length
的三个参数的read
方法。- 覆盖:
-
read
在类FilterInputStream
- 参数:
-
b
- 数据读入的缓冲区。 - 返回:
-
读入缓冲区的总字节数,如果没有更多数据因为已到达流的末尾,则返回
-1
。 - 抛出:
-
IOException
- 如果发生I/O错误。 - 参见:
-
read
从这个输入流中读取最多len
字节的数据到一个字节数组中。此方法将阻塞,直到有一些输入可用。如果第一个参数是null
,则读取并丢弃最多len
字节。- 覆盖:
-
read
在类FilterInputStream
- 参数:
-
b
- 数据读入的缓冲区。 -
off
- 目标数组buf
中的起始偏移量。 -
len
- 最大读取字节数。 - 返回:
-
读入缓冲区的总字节数,如果没有更多数据因为已到达流的末尾,则返回
-1
。 - 抛出:
-
IOException
- 如果发生I/O错误。 - 参见:
-
skip
跳过可以从这个输入流中读取而不阻塞的字节中的n
个字节。可能会跳过比请求的更少的字节。实际跳过的字节数等于
n
或调用available
的结果,以较小者为准。如果n
小于零,则不会跳过任何字节。返回实际跳过的字节数。
- 覆盖:
-
skip
在类FilterInputStream
- 参数:
-
n
- 要跳过的字节数。 - 返回:
- 实际跳过的字节数。
- 抛出:
-
IOException
- 如果发生I/O错误。 - 参见:
-
available
返回可以从这个输入流中读取而不阻塞的字节数。InputStream
的available
方法返回0
。这个方法应该被子类覆盖。- 覆盖:
-
available
在类FilterInputStream
- 返回:
- 可以从这个输入流中读取而不阻塞的字节数。
- 抛出:
-
IOException
- 如果发生I/O错误。
-
close
关闭这个输入流并释放与流相关的任何系统资源。CipherInputStream
的close
方法调用其基础输入流的close
方法。- 指定者:
-
close
在接口AutoCloseable
- 指定者:
-
close
在接口Closeable
- 覆盖:
-
close
在类FilterInputStream
- 抛出:
-
IOException
- 如果发生 I/O 错误。 - 参见:
-
markSupported
public boolean markSupported()测试此输入流是否支持mark
和reset
方法,但它不支持。- 覆盖:
-
markSupported
在类FilterInputStream
- 返回:
-
false
,因为此类不支持mark
和reset
方法。 - 参见:
-