org.apache.poi.hssf.record.cont
Class ContinuableRecordInput
java.lang.Object
org.apache.poi.hssf.record.cont.ContinuableRecordInput
- All Implemented Interfaces:
- LittleEndianInput
public class ContinuableRecordInput
- extends java.lang.Object
- implements LittleEndianInput
A decorated RecordInputStream
that can read primitive data types
(short, int, long, etc.) spanned across a ContinueRecord
boundary.
Most records construct themselves from RecordInputStream
.
This class assumes that a ContinueRecord
record break always occurs at the type boundary,
however, it is not always so.
Two attachments to Bugzilla 50779
demonstrate that a CONTINUE break can appear right in between two bytes of a unicode character
or between two bytes of a short
. The problematic portion of the data is
in a Asian Phonetic Settings Block (ExtRst) of a UnicodeString.
RecordInputStream
greedily requests the bytes to be read and stumbles on such files with a
"Not enough data (1) to read requested (2) bytes" exception. The ContinuableRecordInput
class circumvents this "type boundary" rule and reads data byte-by-byte rolling over CONTINUE if necessary.
YK: For now (March 2011) this class is only used to read
- See Also:
blocks of a UnicodeString.
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
ContinuableRecordInput
public ContinuableRecordInput(RecordInputStream in)
available
public int available()
- Specified by:
available
in interface LittleEndianInput
readByte
public byte readByte()
- Specified by:
readByte
in interface LittleEndianInput
readUByte
public int readUByte()
- Specified by:
readUByte
in interface LittleEndianInput
readShort
public short readShort()
- Specified by:
readShort
in interface LittleEndianInput
readUShort
public int readUShort()
- Specified by:
readUShort
in interface LittleEndianInput
readInt
public int readInt()
- Specified by:
readInt
in interface LittleEndianInput
readLong
public long readLong()
- Specified by:
readLong
in interface LittleEndianInput
readDouble
public double readDouble()
- Specified by:
readDouble
in interface LittleEndianInput
readFully
public void readFully(byte[] buf)
- Specified by:
readFully
in interface LittleEndianInput
readFully
public void readFully(byte[] buf,
int off,
int len)
- Specified by:
readFully
in interface LittleEndianInput
readPlain
public void readPlain(byte[] buf,
int off,
int len)
- Description copied from interface:
LittleEndianInput
- Usually acts the same as
LittleEndianInput.readFully(byte[], int, int)
, but
for an encrypted stream the raw (unencrypted) data is filled
- Specified by:
readPlain
in interface LittleEndianInput
- Parameters:
buf
- the byte array to receive the bytesoff
- the start offset into the byte arraylen
- the amount of bytes to fill