java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
javax.crypto.CipherOutputStream
- 所有已实现的接口:
-
Closeable,Flushable,AutoCloseable
一个
CipherOutputStream由一个OutputStream和一个Cipher对象组成,因此在将数据写入基础OutputStream之前,write()方法首先处理数据。Cipher对象在被CipherOutputStream使用之前必须完全初始化。
例如,如果Cipher对象被初始化用于加密,CipherOutputStream将尝试在写出加密数据之前加密数据。
该类严格遵循其祖先类java.io.OutputStream和java.io.FilterOutputStream的语义,特别是失败语义。该类恰好具有其祖先类中指定的所有方法,并对它们进行了覆盖。此外,该类捕获所有不是由其祖先类抛出的异常。特别是,该类捕获由解密期间失败的完整性检查引发的BadPaddingException和其他异常。这些异常不会被重新抛出,因此客户端将不会被告知完整性检查失败。由于这种行为,如果应用程序在身份验证模式下(例如GCM)需要在认证失败时明确通知,则该类可能不适合用于解密。这样的应用程序可以直接使用Cipher API作为使用该类的替代方法。
对于使用该类的程序员来说,关键是不要使用在该类中未定义或重写的方法(例如稍后添加到其中一个超类的新方法或构造函数),因为这些方法的设计和实现不太可能考虑到CipherOutputStream的安全影响。
- 自从:
- 1.4
- 参见:
-
Field Summary
Fields declared in class java.io.FilterOutputStream
out -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected从一个OutputStream构造一个CipherOutputStream,而不指定Cipher对象。CipherOutputStream(OutputStream os, Cipher c) 从一个OutputStream和一个Cipher对象构造一个CipherOutputStream。 -
Method Summary
Methods declared in class java.io.OutputStream
nullOutputStream
-
Constructor Details
-
CipherOutputStream
从一个OutputStream和一个Cipher对象构造一个CipherOutputStream。
注意:如果指定的输出流或密码器为null,则稍后在使用它们时可能会抛出NullPointerException。- 参数:
-
os-OutputStream对象 -
c- 已初始化的Cipher对象
-
CipherOutputStream
从一个OutputStream构造一个CipherOutputStream,而不指定Cipher对象。这将导致使用NullCipher构造CipherOutputStream的效果。
注意:如果指定的输出流为null,则稍后在使用它时可能会抛出NullPointerException。- 参数:
-
os-OutputStream对象
-
-
Method Details
-
write
将指定的字节写入此输出流。- 覆盖:
-
write在类FilterOutputStream中 - 参数:
-
b- 字节。 - 抛出:
-
IOException- 如果发生I/O错误。
-
write
将指定的字节数组中的b.length字节写入此输出流。CipherOutputStream的write方法使用三个参数b、0和b.length调用具有三个参数的write方法。- 覆盖:
-
write在类FilterOutputStream中 - 参数:
-
b- 数据。 - 抛出:
-
NullPointerException- 如果b为null。 -
IOException- 如果发生I/O错误。 - 参见:
-
write
从指定的字节数组中以偏移量off开始的len字节写入此输出流。- 覆盖:
-
write在类FilterOutputStream中 - 参数:
-
b- 数据。 -
off- 数据中的起始偏移量。 -
len- 要写入的字节数。 - 抛出:
-
IOException- 如果发生I/O错误。 - 参见:
-
flush
通过强制已由封装的Cipher对象处理的任何缓冲输出字节写出来,刷新此输出流。由封装的
Cipher对象缓冲并等待被处理的任何字节将不会被写出。例如,如果封装的Cipher对象是块密码器,并且使用write方法之一写入的字节总数小于密码器的块大小,则不会写出任何字节。- 指定者:
-
flush在接口Flushable中 - 覆盖:
-
flush在类FilterOutputStream中 - 抛出:
-
IOException- 如果发生I/O错误。 - 参见:
-
close
关闭此输出流并释放与该流关联的任何系统资源。此方法调用封装的
Cipher对象的doFinal方法,导致封装的Cipher对象缓冲的任何字节被处理。结果通过调用此输出流的flush方法写出。此方法将封装的
Cipher对象重置为其初始状态,并调用底层输出流的close方法。- 指定者:
-
close在接口AutoCloseable中 - 指定者:
-
close在接口Closeable中 - 覆盖:
-
close在类FilterOutputStream中 - 抛出:
-
IOException- 如果发生I/O错误。 - 参见:
-