Class DataInputBlock
java.lang.Object
org.docx4j.org.apache.poi.poifs.storage.DataInputBlock
Wraps a byte array and provides simple data input access.
Internally, this class maintains a buffer read index, so that for the most part, primitive
data can be read in a data-input-stream-like manner.
Note - the calling class should call the
available() method to detect end-of-buffer
and move to the next data block when the current is exhausted.
For optimisation reasons, no error handling is performed in this class. Thus, mistakes in
calling code ran may raise ugly exceptions here, like ArrayIndexOutOfBoundsException,
etc .
The multi-byte primitive input methods (readUShortLE(), readIntLE() and
readLongLE()) have corresponding 'spanning read' methods which (when required) perform
a read across the block boundary. These spanning read methods take the previous
DataInputBlock as a parameter.
Reads of larger amounts of data (into byte array buffers) must be managed by the caller
since these could conceivably involve more than two blocks.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final byte[]Possibly any size (usually 512K or 64K).private intprivate int -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionintvoidreadFully(byte[] buf, int off, int len) Reads len bytes from this block into the supplied buffer.intReads an int which was encoded in little endian format.intreadIntLE(DataInputBlock prevBlock, int prevBlockAvailable) Reads an int which spans the end of prevBlock and the start of this block.longReads a long which was encoded in little endian format.longreadLongLE(DataInputBlock prevBlock, int prevBlockAvailable) Reads a long which spans the end of prevBlock and the start of this block.private voidreadSpanning(DataInputBlock prevBlock, int prevBlockAvailable, byte[] buf) Reads a small amount of data from across the boundary between two blocks.intintReads a short which was encoded in little endian format.intreadUShortLE(DataInputBlock prevBlock) Reads a short which spans the end of prevBlock and the start of this block.
-
Field Details
-
_buf
private final byte[] _bufPossibly any size (usually 512K or 64K). Assumed to be at least 8 bytes for all blocks before the end of the stream. The last block in the stream can be any size except zero. -
_readIndex
private int _readIndex -
_maxIndex
private int _maxIndex
-
-
Constructor Details
-
DataInputBlock
DataInputBlock(byte[] data, int startOffset)
-
-
Method Details
-
available
public int available() -
readUByte
public int readUByte() -
readUShortLE
public int readUShortLE()Reads a short which was encoded in little endian format. -
readUShortLE
Reads a short which spans the end of prevBlock and the start of this block. -
readIntLE
public int readIntLE()Reads an int which was encoded in little endian format. -
readIntLE
Reads an int which spans the end of prevBlock and the start of this block. -
readLongLE
public long readLongLE()Reads a long which was encoded in little endian format. -
readLongLE
Reads a long which spans the end of prevBlock and the start of this block. -
readSpanning
Reads a small amount of data from across the boundary between two blocks. The_readIndexof this (the second) block is updated accordingly. Note- this method (and other code) assumes that the secondDataInputBlockalways is big enough to complete the read without being exhausted. -
readFully
public void readFully(byte[] buf, int off, int len) Reads len bytes from this block into the supplied buffer.
-