Package com.tangosol.io
Class Base64OutputStream
- java.lang.Object
-
- java.io.OutputStream
-
- com.tangosol.io.Base64OutputStream
-
- All Implemented Interfaces:
com.oracle.coherence.common.io.OutputStreaming
,OutputStreaming
,Closeable
,Flushable
,AutoCloseable
public class Base64OutputStream extends OutputStream implements OutputStreaming
Writes binary data into a Writer using IETF RFC 2045 Base64 Content Transfer Encoding. If the Base64OutputStream is not the first to write data into the Writer, it may be desired to write a line feed before Base64 data. According to the specification, Base64 data cannot exceed 76 characters per line. Be careful to avoid calling flush() except when a stream of Base64 content is complete.- Author:
- cp 2000.09.06
-
-
Field Summary
Fields Modifier and Type Field Description protected static char[]
BASE64_ALPHABET
Base64 encodes into this "alphabet" of 64 characters.protected static char
BASE64_LF
The Base64 line feed character.protected static char
BASE64_PAD
The Base64 padding character.protected static int
GROUPS_PER_LINE
The number of Base64 character groups in one line.protected byte[]
m_abAccum
Accumulated bytes.protected char[]
m_achGroup
An array that is used to send 4 characters at a time to the underlying Writer object.protected int
m_cAccum
The number of bytes accumulated (0, 1, 2 or 3).protected int
m_cLineGroups
The number of groups left to write in the current line.protected boolean
m_fBreakLines
True if lines are to be broken by BASE64_LF;protected boolean
m_fClosed
True after close is invoked.protected Writer
m_writer
The Writer object to which the Base64 encoded data is written.
-
Constructor Summary
Constructors Constructor Description Base64OutputStream(Writer writer)
Construct a Base64OutputStream on a Writer object.Base64OutputStream(Writer writer, boolean fBreakLines)
Construct a Base64OutputStream on a Writer object and specifying a line-break option.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
Close the stream, flushing any accumulated bytes.static char[]
encode(byte[] ab)
Encode the passed binary data using Base64 encoding.static char[]
encode(byte[] ab, boolean fBreakLines)
Encode the passed binary data using Base64 encoding.static char[]
encode(byte[] ab, int ofb, int cb, boolean fBreakLines)
Encode the passed binary data using Base64 encoding.void
flush()
Close the stream, flushing any accumulated bytes.protected void
flushAccumulator()
Flushes the bytes accumulated by the write(int) method.void
write(byte[] ab, int ofb, int cb)
Writeslen
bytes from the specified byte array starting at offsetoff
to this output stream.void
write(int b)
Writes the specified byte to this output stream.-
Methods inherited from class java.io.OutputStream
nullOutputStream, write
-
-
-
-
Field Detail
-
BASE64_ALPHABET
protected static final char[] BASE64_ALPHABET
Base64 encodes into this "alphabet" of 64 characters.
-
BASE64_PAD
protected static final char BASE64_PAD
The Base64 padding character. Base64 is encoded into 4-character chunks; if the last chunk does not contain 4 characters, it is filled with this padding character.- See Also:
- Constant Field Values
-
BASE64_LF
protected static final char BASE64_LF
The Base64 line feed character. Base64 is encoded into 76-character lines unless .- See Also:
- Constant Field Values
-
GROUPS_PER_LINE
protected static final int GROUPS_PER_LINE
The number of Base64 character groups in one line. This number prevents a line from exceeding 76 characters.- See Also:
- Constant Field Values
-
m_fClosed
protected boolean m_fClosed
True after close is invoked.
-
m_writer
protected Writer m_writer
The Writer object to which the Base64 encoded data is written.
-
m_fBreakLines
protected boolean m_fBreakLines
True if lines are to be broken by BASE64_LF;
-
m_cLineGroups
protected int m_cLineGroups
The number of groups left to write in the current line.
-
m_abAccum
protected byte[] m_abAccum
Accumulated bytes.
-
m_cAccum
protected int m_cAccum
The number of bytes accumulated (0, 1, 2 or 3).
-
m_achGroup
protected char[] m_achGroup
An array that is used to send 4 characters at a time to the underlying Writer object.
-
-
Constructor Detail
-
Base64OutputStream
public Base64OutputStream(Writer writer)
Construct a Base64OutputStream on a Writer object.- Parameters:
writer
- the Writer to write the Base64 encoded data to
-
Base64OutputStream
public Base64OutputStream(Writer writer, boolean fBreakLines)
Construct a Base64OutputStream on a Writer object and specifying a line-break option.- Parameters:
writer
- the Writer to write the Base64 encoded data tofBreakLines
- true to break the output into 76-character lines
-
-
Method Detail
-
write
public void write(int b) throws IOException
Writes the specified byte to this output stream.- Specified by:
write
in interfacecom.oracle.coherence.common.io.OutputStreaming
- Specified by:
write
in classOutputStream
- Parameters:
b
- thebyte
.- Throws:
IOException
- if an I/O error occurs. In particular, anIOException
may be thrown if the output stream has been closed.
-
write
public void write(byte[] ab, int ofb, int cb) throws IOException
Writeslen
bytes from the specified byte array starting at offsetoff
to this output stream.If
b
isnull
, aNullPointerException
is thrown.If
off
is negative, orlen
is negative, oroff+len
is greater than the length of the arrayb
, then an IndexOutOfBoundsException is thrown.- Specified by:
write
in interfacecom.oracle.coherence.common.io.OutputStreaming
- Overrides:
write
in classOutputStream
- Parameters:
ab
- the dataofb
- the start offset in the datacb
- the number of bytes to write- Throws:
IOException
- if an I/O error occurs. In particular, anIOException
is thrown if the output stream is closed.
-
flush
public void flush() throws IOException
Close the stream, flushing any accumulated bytes. The underlying writer is not closed.- Specified by:
flush
in interfaceFlushable
- Specified by:
flush
in interfacecom.oracle.coherence.common.io.OutputStreaming
- Overrides:
flush
in classOutputStream
- Throws:
IOException
- if an I/O error occurs
-
close
public void close() throws IOException
Close the stream, flushing any accumulated bytes. The underlying writer is not closed.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfacecom.oracle.coherence.common.io.OutputStreaming
- Overrides:
close
in classOutputStream
- Throws:
IOException
- if an I/O error occurs
-
flushAccumulator
protected void flushAccumulator() throws IOException
Flushes the bytes accumulated by the write(int) method.- Throws:
IOException
- if an I/O error occurs
-
encode
public static char[] encode(byte[] ab)
Encode the passed binary data using Base64 encoding.- Parameters:
ab
- the array containing the bytes to encode- Returns:
- the encoded data as a char array
-
encode
public static char[] encode(byte[] ab, boolean fBreakLines)
Encode the passed binary data using Base64 encoding.- Parameters:
ab
- the array containing the bytes to encodefBreakLines
- true to break the output into 76-character lines- Returns:
- the encoded data as a char array
-
encode
public static char[] encode(byte[] ab, int ofb, int cb, boolean fBreakLines)
Encode the passed binary data using Base64 encoding.- Parameters:
ab
- the array containing the bytes to encodeofb
- the start offset in the byte arraycb
- the number of bytes to encodefBreakLines
- true to break the output into 76-character lines- Returns:
- the encoded data as a char array
-
-