模块  java.base
软件包  javax.crypto

Class CipherOutputStream

  • 实现的所有接口
    CloseableFlushableAutoCloseable

    public class CipherOutputStream
    extends FilterOutputStream
    CipherOutputStream由OutputStream和Cipher组成,因此write()方法在将数据写入底层OutputStream之前首先处理数据。 在由CipherOutputStream使用之前,必须完全初始化密码。

    例如,如果密码被初始化以进行加密,则CipherOutputStream将在写出加密数据之前尝试加密数据。

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

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

    从以下版本开始:
    1.4
    另请参见:
    OutputStreamFilterOutputStreamCipherCipherInputStream
    • 构造方法详细信息

      • 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对象
    • 方法详细信息

      • write

        public void write​(byte[] b,
                          int off,
                          int len)
                   throws IOException
        将从偏移量为 off的指定字节数组中的 len个字节写入此输出流。
        重写:
        write在类 FilterOutputStream
        参数
        b - 数据。
        off - 数据中的起始偏移量。
        len - 要写入的字节数。
        异常
        IOException - 如果发生I / O错误。
        另请参见:
        FilterOutputStream.write(int)
      • flush

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

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

        Specified by:
        flush在界面 Flushable
        重写:
        flush in class FilterOutputStream
        异常
        IOException - 如果发生I / O错误。
        另请参见:
        FilterOutputStream.out
      • close

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

        此方法调用封装的密码对象的doFinal方法,该方法将处理由封装的密码缓冲的任何字节。 通过调用此输出流的flush方法写出结果。

        此方法将封装的密码对象重置为其初始状态,并调用基础输出流的close方法。

        Specified by:
        close在界面 AutoCloseable
        Specified by:
        close在界面 Closeable
        重写:
        closeFilterOutputStream
        异常
        IOException - 如果发生I / O错误。
        另请参见:
        FilterOutputStream.flush()FilterOutputStream.out