Base64OutputStreampublic class Base64OutputStream extends FilterOutputStream Provides Base64 encoding and decoding in a streaming fashion (unlimited size).
When encoding the default lineLength is 76 characters and the default
lineEnding is CRLF, but these can be overridden by using the appropriate
constructor.
The default behaviour of the Base64OutputStream is to ENCODE, whereas the
default behaviour of the Base64InputStream is to DECODE. But this behaviour
can be overridden by using a different constructor.
This class implements section 6.8. Base64 Content-Transfer-Encoding from RFC 2045 Multipurpose
Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies by Freed and Borenstein.
|
Fields Summary |
---|
private final boolean | doEncode | private final Base64 | base64 | private final byte[] | singleByte |
Constructors Summary |
---|
public Base64OutputStream(OutputStream out)Creates a Base64OutputStream such that all data written is Base64-encoded
to the original provided OutputStream.
this(out, true);
| public Base64OutputStream(OutputStream out, boolean doEncode)Creates a Base64OutputStream such that all data written is either
Base64-encoded or Base64-decoded to the original provided OutputStream.
super(out);
this.doEncode = doEncode;
this.base64 = new Base64();
| public Base64OutputStream(OutputStream out, boolean doEncode, int lineLength, byte[] lineSeparator)Creates a Base64OutputStream such that all data written is either
Base64-encoded or Base64-decoded to the original provided OutputStream.
super(out);
this.doEncode = doEncode;
this.base64 = new Base64(lineLength, lineSeparator);
|
Methods Summary |
---|
public void | close()Closes this output stream, flushing any remaining bytes that must be encoded. The
underlying stream is flushed but not closed.
// Notify encoder of EOF (-1).
if (doEncode) {
base64.encode(singleByte, 0, -1);
} else {
base64.decode(singleByte, 0, -1);
}
flush();
| private void | flush(boolean propogate)Flushes this output stream and forces any buffered output bytes
to be written out to the stream. If propogate is true, the wrapped
stream will also be flushed.
int avail = base64.avail();
if (avail > 0) {
byte[] buf = new byte[avail];
int c = base64.readResults(buf, 0, avail);
if (c > 0) {
out.write(buf, 0, c);
}
}
if (propogate) {
out.flush();
}
| public void | flush()Flushes this output stream and forces any buffered output bytes
to be written out to the stream.
flush(true);
| public void | write(int i)Writes the specified byte to this output stream.
singleByte[0] = (byte) i;
write(singleByte, 0, 1);
| public void | write(byte[] b, int offset, int len)Writes len bytes from the specified
b array starting at offset to
this output stream.
if (b == null) {
throw new NullPointerException();
} else if (offset < 0 || len < 0 || offset + len < 0) {
throw new IndexOutOfBoundsException();
} else if (offset > b.length || offset + len > b.length) {
throw new IndexOutOfBoundsException();
} else if (len > 0) {
if (doEncode) {
base64.encode(b, offset, len);
} else {
base64.decode(b, offset, len);
}
flush(false);
}
|
|