Package org.jibx.runtime.impl
Class InByteBuffer
- java.lang.Object
-
- org.jibx.runtime.impl.InByteBuffer
-
- All Implemented Interfaces:
IByteBuffer
,IInByteBuffer
public class InByteBuffer extends java.lang.Object implements IInByteBuffer
Byte buffer wrapping an input stream. Clients need to obey the interface access rules.- Author:
- Dennis M. Sosnoski
-
-
Field Summary
Fields Modifier and Type Field Description static int
DEFAULT_BUFFER_SIZE
Default input buffer size.private byte[]
m_buffer
Buffer for input bytes.private boolean
m_isEnd
Flag for end of stream reached.private int
m_limit
Offset past end of bytes in buffer.private int
m_offset
Current offset for removing bytes from buffer.private java.io.InputStream
m_stream
Stream for byte input.
-
Constructor Summary
Constructors Constructor Description InByteBuffer()
Constructor using default buffer size.InByteBuffer(int size)
Constructor with size specified.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private boolean
fillBuffer(int size)
Read data into the buffer to assure at least a minimum number of bytes are available.void
finish()
Complete usage of the current stream.byte[]
getBuffer()
Get the byte array buffer.int
getLimit()
Get offset past the end of data in buffer.int
getOffset()
Get the index of the next byte to be read.boolean
require(int size)
Require some number of bytes of data.void
reset()
Reset to initial state for reuse.void
setInput(java.io.InputStream is)
Set the actual input stream to be used for this buffer.void
setOffset(int offset)
Set the current offset.
-
-
-
Field Detail
-
DEFAULT_BUFFER_SIZE
public static final int DEFAULT_BUFFER_SIZE
Default input buffer size.- See Also:
- Constant Field Values
-
m_stream
private java.io.InputStream m_stream
Stream for byte input.
-
m_isEnd
private boolean m_isEnd
Flag for end of stream reached.
-
m_buffer
private byte[] m_buffer
Buffer for input bytes.
-
m_limit
private int m_limit
Offset past end of bytes in buffer.
-
m_offset
private int m_offset
Current offset for removing bytes from buffer.
-
-
Method Detail
-
fillBuffer
private boolean fillBuffer(int size) throws java.io.IOException
Read data into the buffer to assure at least a minimum number of bytes are available. Any retained data is first copied down to the start of the buffer array. Next, data is read from the wrapped stream into the available space in the buffer. The actual number of characters read by a call to this method is normally between one and the space available in the buffer array.- Parameters:
size
- minimum number of bytes required- Returns:
true
if data has been read into buffer,false
if not- Throws:
java.io.IOException
- on error reading from wrapped stream
-
reset
public void reset()
Reset to initial state for reuse.
-
setInput
public void setInput(java.io.InputStream is)
Set the actual input stream to be used for this buffer. If an input stream is currently open when this is called the existing stream is closed and any buffered data discarded, with any errors ignored.- Parameters:
is
- stream
-
getBuffer
public byte[] getBuffer()
Get the byte array buffer.- Specified by:
getBuffer
in interfaceIByteBuffer
- Returns:
- array
-
getOffset
public int getOffset()
Get the index of the next byte to be read. After reading data, thesetOffset(int)
method must be used to update the current offset before any other operations are performed on the buffer.- Specified by:
getOffset
in interfaceIByteBuffer
- Returns:
- offset
-
setOffset
public void setOffset(int offset)
Set the current offset. This must be used to update the stored buffer state after reading any data.- Specified by:
setOffset
in interfaceIByteBuffer
- Parameters:
offset
-
-
getLimit
public int getLimit()
Get offset past the end of data in buffer.- Specified by:
getLimit
in interfaceIInByteBuffer
- Returns:
- offset past end of data
-
require
public boolean require(int size) throws java.io.IOException
Require some number of bytes of data. When this call is made the buffer can discard all data up to the current offset, and will copy retained data down to the start of the buffer array and read more data from the input stream if necessary to make the requested number of bytes available. This call may cause the byte array buffer to be replaced, sogetBuffer()
,getLimit()
, andgetOffset()
must all be called again before any further use of the buffer.- Specified by:
require
in interfaceIInByteBuffer
- Parameters:
size
- desired number of bytes- Returns:
true
if request satisfied,false
if not- Throws:
java.io.IOException
-
finish
public void finish() throws java.io.IOException
Complete usage of the current stream. This method should be called whenever the application is done reading from the buffered stream. Once this method is called, a call tosetInput(InputStream)
is required before the buffer can again be used.- Specified by:
finish
in interfaceIByteBuffer
- Throws:
java.io.IOException
-
-