FileDocCategorySizeDatePackage
CipherOutputStream.javaAPI DocAndroid 1.5 API5159Wed May 06 22:41:02 BST 2009javax.crypto

CipherOutputStream

public class CipherOutputStream extends FilterOutputStream
This class wraps an output stream and a cipher so that {@code write} methods send the data through the cipher before writing them to the underlying output stream.

The cipher must be initialized for the requested operation before being used by a {@code CipherOutputStream}. For example, if a cipher initialized for encryption is used with a {@code CipherOutputStream}, the {@code CipherOutputStream} tries to encrypt the data writing it out.

since
Android 1.0

Fields Summary
private final Cipher
cipher
private final byte[]
arr
Constructors Summary
public CipherOutputStream(OutputStream os, Cipher c)
Creates a new {@code CipherOutputStream} instance for an {@code OutputStream} and a {@code Cipher}.

param
os the output stream to write data to.
param
c the cipher to process the data with.
since
Android 1.0


                                                                   
         
        super(os);
        cipher = c;
    
protected CipherOutputStream(OutputStream os)
Creates a new {@code CipherOutputStream} instance for an {@code OutputStream} without a cipher.

A {@code NullCipher} is created to process the data.

param
os the output stream to write the data to.
since
Android 1.0

        this(os, new NullCipher());
    
Methods Summary
public voidclose()
Close this cipher output stream.

On the underlying cipher {@code doFinal} will be invoked, and any buffered bytes from the cipher are also written out, and the cipher is reset to its initial state. The underlying output stream is also closed.

throws
IOException if an error occurs.

        byte[] result;
        try {
            if (cipher != null) {
                result = cipher.doFinal();
                if (result != null) {
                    out.write(result);
                }
            }
            if (out != null) {
                out.flush();
            }
        } catch (BadPaddingException e) {
            throw new IOException(e.getMessage());
        } catch (IllegalBlockSizeException e) {
            throw new IOException(e.getMessage());
        } finally {
            if (out != null) {
                out.close();
            }
        }
    
public voidflush()
Flushes this cipher output stream.

throws
IOException if an error occurs

        out.flush();
    
public voidwrite(int b)
Writes the single byte to this cipher output stream.

param
b the byte to write.
throws
IOException if an error occurs.
since
Android 1.0

        byte[] result;
        arr[0] = (byte) b;
        result = cipher.update(arr);
        if (result != null) {
            out.write(result);
        }
    
public voidwrite(byte[] b)
Writes the buffer of bytes to this cipher output stream.

param
b the buffer of bytes.
throws
IOException if an error occurs.
since
Android 1.0

        write(b, 0, b.length);
    
public voidwrite(byte[] b, int off, int len)
Writes the {@code len} bytes from buffer {@code b} starting at offset {@code off} to this cipher output stream.

param
b the buffer.
param
off the offset to start at.
param
len the number of bytes.
throws
IOException if an error occurs.
since
Android 1.0

        if (len == 0) {
            return;
        }
        byte[] result = cipher.update(b, off, len);
        if (result != null) {
            out.write(result);
        }