java.lang.Object
java.io.InputStream
java.io.FilterInputStream
javax.crypto.CipherInputStream
- 所有已实现的接口:
Closeable,AutoCloseable
CipherInputStream 由一个 InputStream 和一个 Cipher 对象组成,因此 read() 方法返回从底层 InputStream 读入但已由 Cipher 对象额外处理的数据。 Cipher 对象必须在被 CipherInputStream 使用之前完全初始化。
例如,如果初始化 Cipher 对象以进行解密,则 CipherInputStream 将尝试读入数据并对其进行解密,然后返回解密数据。
此类严格遵守其祖先类 java.io.FilterInputStream 和 java.io.InputStream 的语义,尤其是故障语义。此类具有在其祖先类中指定的那些方法,并覆盖了所有这些方法。此外,此类捕获其祖先类未抛出的所有异常。特别是skip方法会跳过,available方法只统计封装好的Cipher对象处理过的数据。此类可能会捕获 BadPaddingException 以及解密过程中完整性检查失败引发的其他异常。这些异常不会重新抛出,因此可能不会通知客户端完整性检查失败。由于这种行为,此类可能不适合在经过身份验证的操作模式(例如 GCM)中用于解密。需要经过身份验证的加密的应用程序可以直接使用 Cipher API 作为使用此类的替代方法。
对于使用此类的程序员来说,不要使用未在此类中定义或覆盖的方法(例如稍后添加到超类之一的新方法或构造函数)是至关重要的,因为这些方法的设计和实现不太可能考虑过关于 CipherInputStream 的安全影响。
- 自从:
- 1.4
- 参见:
-
字段摘要
在类 java.io.FilterInputStream 中声明的字段
in -
构造方法总结
构造方法修饰符构造方法描述protected在不指定Cipher对象的情况下从InputStream构造一个CipherInputStream。CipherInputStream(InputStream is, Cipher c) 从InputStream和Cipher对象构造一个CipherInputStream。 -
方法总结
修饰符和类型方法描述int返回可以从该输入流中无阻塞地读取的字节数。voidclose()关闭此输入流并释放与该流关联的所有系统资源。boolean测试此输入流是否支持mark和reset方法,但它不支持。intread()从此输入流中读取下一个字节的数据。intread(byte[] b) 从此输入流中读取最多b.length字节的数据到字节数组中。intread(byte[] b, int off, int len) 从此输入流中读取最多len字节的数据到字节数组中。longskip(long n) 从可从此输入流读取的字节中跳过n字节的输入而不阻塞。在类 java.io.FilterInputStream 中声明的方法
mark, reset在类 java.io.InputStream 中声明的方法
nullInputStream, readAllBytes, readNBytes, readNBytes, skipNBytes, transferTo
-
构造方法详细信息
-
CipherInputStream
从InputStream和Cipher对象构造一个CipherInputStream。
注意:如果指定的输入流或密码为null,则稍后使用时可能会抛出NullPointerException。- 参数:
is- 待处理的输入流c- 一个初始化的Cipher对象
-
CipherInputStream
在不指定Cipher对象的情况下从InputStream构造一个CipherInputStream。这具有使用NullCipher构建CipherInputStream的效果。
注意:如果指定的输入流是null,后面使用的时候可能会抛出一个NullPointerException。- 参数:
is- 待处理的输入流
-
-
方法详情
-
read
从此输入流中读取下一个字节的数据。值字节作为int在0到255范围内返回。如果因为已到达流的末尾而没有可用字节,则返回值-1。此方法会阻塞,直到输入数据可用、检测到流结束或抛出异常为止。- 重写:
read在类FilterInputStream中- 返回:
-
下一个数据字节,如果到达流的末尾则为
-1。 - 抛出:
IOException- 如果发生 I/O 错误。- 参见:
-
read
从此输入流中读取最多b.length字节的数据到字节数组中。InputStream的read方法调用了三个参数的read方法,参数为b、0和b.length。- 重写:
read在类FilterInputStream中- 参数:
b- 读取数据的缓冲区。- 返回:
-
读入缓冲区的字节总数,或者
-1没有更多数据,因为已经到达流的末尾。 - 抛出:
IOException- 如果发生 I/O 错误。- 参见:
-
read
从此输入流中读取最多len字节的数据到字节数组中。在某些输入可用之前,此方法会阻塞。如果第一个参数是null,则最多读取并丢弃len字节。- 重写:
read在类FilterInputStream中- 参数:
b- 读取数据的缓冲区。off- 目标数组中的起始偏移量buflen- 读取的最大字节数。- 返回:
-
读入缓冲区的字节总数,如果因为已到达流的末尾而没有更多数据,则为
-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方法。- 参见:
-