Module java.base
Package javax.crypto

Class CipherOutputStream

所有已实现的接口:
Closeable, Flushable, AutoCloseable

public class CipherOutputStream extends FilterOutputStream
一个CipherOutputStream由一个OutputStream和一个Cipher对象组成,因此在将数据写入基础OutputStream之前,write()方法首先处理数据。Cipher对象在被CipherOutputStream使用之前必须完全初始化。

例如,如果Cipher对象被初始化用于加密,CipherOutputStream将尝试在写出加密数据之前加密数据。

该类严格遵循其祖先类java.io.OutputStreamjava.io.FilterOutputStream的语义,特别是失败语义。该类恰好具有其祖先类中指定的所有方法,并对它们进行了覆盖。此外,该类捕获所有不是由其祖先类抛出的异常。特别是,该类捕获由解密期间失败的完整性检查引发的BadPaddingException和其他异常。这些异常不会被重新抛出,因此客户端将不会被告知完整性检查失败。由于这种行为,如果应用程序在身份验证模式下(例如GCM)需要在认证失败时明确通知,则该类可能不适合用于解密。这样的应用程序可以直接使用Cipher API作为使用该类的替代方法。

对于使用该类的程序员来说,关键是不要使用在该类中未定义或重写的方法(例如稍后添加到其中一个超类的新方法或构造函数),因为这些方法的设计和实现不太可能考虑到CipherOutputStream的安全影响。

自从:
1.4
参见:
  • Field Summary

    Fields declared in class java.io.FilterOutputStream

    out
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    从一个OutputStream构造一个CipherOutputStream,而不指定Cipher对象。
     
    从一个OutputStream和一个Cipher对象构造一个CipherOutputStream
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    close()
    关闭此输出流并释放与该流关联的任何系统资源。
    void
    flush()
    通过强制已由封装的Cipher对象处理的任何缓冲输出字节写出来,刷新此输出流。
    void
    write(byte[] b)
    将指定的字节数组中的b.length字节写入此输出流。
    void
    write(byte[] b, int off, int len)
    从指定的字节数组中以偏移量off开始的len字节写入此输出流。
    void
    write(int b)
    将指定的字节写入此输出流。

    Methods declared in class java.io.OutputStream

    nullOutputStream

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • CipherOutputStream

      public CipherOutputStream(OutputStream os, Cipher c)
      从一个OutputStream和一个Cipher对象构造一个CipherOutputStream
      注意:如果指定的输出流或密码器为null,则稍后在使用它们时可能会抛出NullPointerException
      参数:
      os - OutputStream对象
      c - 已初始化的Cipher对象
    • CipherOutputStream

      protected CipherOutputStream(OutputStream os)
      从一个OutputStream构造一个CipherOutputStream,而不指定Cipher对象。这将导致使用NullCipher构造CipherOutputStream的效果。
      注意:如果指定的输出流为null,则稍后在使用它时可能会抛出NullPointerException
      参数:
      os - OutputStream对象
  • Method Details

    • write

      public void write(int b) throws IOException
      将指定的字节写入此输出流。
      覆盖:
      write 在类 FilterOutputStream
      参数:
      b - 字节。
      抛出:
      IOException - 如果发生I/O错误。
    • write

      public void write(byte[] b) throws IOException
      将指定的字节数组中的b.length字节写入此输出流。

      CipherOutputStreamwrite方法使用三个参数b0b.length调用具有三个参数的write方法。

      覆盖:
      write 在类 FilterOutputStream
      参数:
      b - 数据。
      抛出:
      NullPointerException - 如果bnull
      IOException - 如果发生I/O错误。
      参见:
    • write

      public void write(byte[] b, int off, int len) throws IOException
      从指定的字节数组中以偏移量off开始的len字节写入此输出流。
      覆盖:
      write 在类 FilterOutputStream
      参数:
      b - 数据。
      off - 数据中的起始偏移量。
      len - 要写入的字节数。
      抛出:
      IOException - 如果发生I/O错误。
      参见:
    • flush

      public void flush() throws IOException
      通过强制已由封装的Cipher对象处理的任何缓冲输出字节写出来,刷新此输出流。

      由封装的Cipher对象缓冲并等待被处理的任何字节将不会被写出。例如,如果封装的Cipher对象是块密码器,并且使用write方法之一写入的字节总数小于密码器的块大小,则不会写出任何字节。

      指定者:
      flush 在接口 Flushable
      覆盖:
      flush 在类 FilterOutputStream
      抛出:
      IOException - 如果发生I/O错误。
      参见:
    • close

      public void close() throws IOException
      关闭此输出流并释放与该流关联的任何系统资源。

      此方法调用封装的Cipher对象的doFinal方法,导致封装的Cipher对象缓冲的任何字节被处理。结果通过调用此输出流的flush方法写出。

      此方法将封装的Cipher对象重置为其初始状态,并调用底层输出流的close方法。

      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Closeable
      覆盖:
      close 在类 FilterOutputStream
      抛出:
      IOException - 如果发生I/O错误。
      参见: