Package com.tangosol.io
Class MultiByteArrayOutputStream
- java.lang.Object
-
- java.io.OutputStream
-
- com.tangosol.io.MultiByteArrayOutputStream
-
- All Implemented Interfaces:
com.oracle.coherence.common.io.OutputStreaming
,OutputStreaming
,Closeable
,Flushable
,AutoCloseable
public class MultiByteArrayOutputStream extends OutputStream implements OutputStreaming
An OutputStream that accumulates the written data to a series of byte arrays that do not exceed a specified size.- Author:
- cp 2001.11.13
-
-
Field Summary
Fields Modifier and Type Field Description protected byte[]
m_ab
The current block of output.protected int
m_cbBlock
The max size of each block.protected int
m_cBlocks
The number of flushed blocks.protected int
m_cbPadBack
The number of additional bytes to allocate and leave free at the back (end) of each blockprotected int
m_cbPadFront
The number of additional bytes to allocate and leave free at the front (start) of each blockprotected boolean
m_fClosed
True after close is invoked.protected List
m_listBlock
The list of blocks.protected int
m_of
The offset into the current block of output.
-
Constructor Summary
Constructors Constructor Description MultiByteArrayOutputStream(int cbBlock)
Construct a MultiByteArrayOutputStream to write to byte arrays of the specified length.MultiByteArrayOutputStream(int cbBlock, int cbPadFront, int cbPadBack)
Construct a MultiByteArrayOutputStream to write to byte arrays of the specified length, leaving the specified amount of padding at the front and back of each byte array.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
check()
Verify that the stream is still open.void
close()
Close the stream, flushing any accumulated bytes.void
flush()
Flush any accumulated bytes.int
getBackPaddingSize()
Determine the number of extra bytes of padding that will be allocated and left blank at the end of each block after the data portion.byte[]
getBlock(int i)
Obtain the specified block of data.int
getBlockCount()
Determine the number of blocks that have been written thus far.int
getBlockDataSize()
Determine the maximum number of bytes of data that will be stored in each block.int
getBlockDataSize(int i)
Determine the specific number of bytes of data stored in the specified block.int
getFrontPaddingSize()
Determine the number of extra bytes of padding that will be allocated and left blank at the start of each block in front of the data portion.protected int
requestCapacity(int cbMore)
Ensure that the current block contains some available capacity, preferably enough to fulfill the specified capacity.String
toString()
Create a human readable string representing the data written to the stream.void
write(byte[] abSrc, int ofSrc, int cbSrc)
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
-
m_ab
protected byte[] m_ab
The current block of output.
-
m_of
protected int m_of
The offset into the current block of output.
-
m_cbBlock
protected int m_cbBlock
The max size of each block.
-
m_cbPadFront
protected int m_cbPadFront
The number of additional bytes to allocate and leave free at the front (start) of each block
-
m_cbPadBack
protected int m_cbPadBack
The number of additional bytes to allocate and leave free at the back (end) of each block
-
m_listBlock
protected List m_listBlock
The list of blocks.
-
m_cBlocks
protected int m_cBlocks
The number of flushed blocks.
-
m_fClosed
protected boolean m_fClosed
True after close is invoked.
-
-
Constructor Detail
-
MultiByteArrayOutputStream
public MultiByteArrayOutputStream(int cbBlock)
Construct a MultiByteArrayOutputStream to write to byte arrays of the specified length.- Parameters:
cbBlock
- the number of bytes (maximum) per block
-
MultiByteArrayOutputStream
public MultiByteArrayOutputStream(int cbBlock, int cbPadFront, int cbPadBack)
Construct a MultiByteArrayOutputStream to write to byte arrays of the specified length, leaving the specified amount of padding at the front and back of each byte array.- Parameters:
cbBlock
- the number of data bytes (maximum) per blockcbPadFront
- the number of additional bytes to allocate and leave free at the front (start) of each blockcbPadBack
- the number of additional bytes to allocate and leave free at the back (end) of each block
-
-
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[] abSrc, int ofSrc, int cbSrc) 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:
abSrc
- the dataofSrc
- the start offset in the datacbSrc
- 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
Flush any accumulated bytes.- 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.- 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
-
toString
public String toString()
Create a human readable string representing the data written to the stream.
-
getBlockCount
public int getBlockCount()
Determine the number of blocks that have been written thus far.- Returns:
- the number of blocks (byte arrays) of output that have any data
-
getBlock
public byte[] getBlock(int i)
Obtain the specified block of data.- Parameters:
i
- block index in the range [0..getBlockCount()]; passing the getBlockCount() will return the active block- Returns:
- the specified block (byte array) of output
-
getBlockDataSize
public int getBlockDataSize(int i)
Determine the specific number of bytes of data stored in the specified block.- Parameters:
i
- block index in the range [0..getBlockCount()]; passing the getBlockCount() will return the size of the active block- Returns:
- the number of data bytes in a block
-
getBlockDataSize
public int getBlockDataSize()
Determine the maximum number of bytes of data that will be stored in each block.- Returns:
- the number of data bytes (maximum) per block
-
getFrontPaddingSize
public int getFrontPaddingSize()
Determine the number of extra bytes of padding that will be allocated and left blank at the start of each block in front of the data portion.- Returns:
- the number of additional bytes to allocate and leave free at the front (start) of each block
-
getBackPaddingSize
public int getBackPaddingSize()
Determine the number of extra bytes of padding that will be allocated and left blank at the end of each block after the data portion.- Returns:
- the number of additional bytes to allocate and leave free at the back (end) of each block
-
check
protected void check() throws IOException
Verify that the stream is still open.- Throws:
IOException
-
requestCapacity
protected int requestCapacity(int cbMore)
Ensure that the current block contains some available capacity, preferably enough to fulfill the specified capacity. As a result of calling this method m_ab and m_of may change. If this call returns then the current block is guarenteed to contain at least one free byte of available capacity.- Parameters:
cbMore
- the requested capacity- Returns:
- the size of the current block
-
-