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
ConstructorsModifierConstructorDescriptionprotected从一个InputStream构造一个CipherInputStream,而不指定Cipher对象。CipherInputStream(InputStream is, Cipher c) 从一个InputStream和一个Cipher对象构造一个CipherInputStream。 -
Method Summary
Modifier and TypeMethodDescriptionint返回可以从这个输入流中读取而不阻塞的字节数。voidclose()关闭这个输入流并释放与流相关的任何系统资源。boolean测试这个输入流是否支持mark和reset方法,它不支持。intread()从这个输入流中读取下一个字节的数据。intread(byte[] b) 从这个输入流中读取最多b.length字节的数据到一个字节数组中。intread(byte[] b, int off, int len) 从这个输入流中读取最多len字节的数据到一个字节数组中。longskip(long n) 跳过可以从这个输入流中读取而不阻塞的字节中的n个字节。Methods declared in class java.io.FilterInputStream
mark, resetMethods 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方法。 - 参见:
-