Class ContinuableRecordInput
- java.lang.Object
-
- org.apache.poi.hssf.record.cont.ContinuableRecordInput
-
- All Implemented Interfaces:
LittleEndianInput
public class ContinuableRecordInput extends Object implements LittleEndianInput
A decoratedRecordInputStreamthat can read primitive data types (short, int, long, etc.) spanned across aContinueRecordboundary.Most records construct themselves from
RecordInputStream. This class assumes that aContinueRecordrecord 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.RecordInputStreamgreedily requests the bytes to be read and stumbles on such files with a "Not enough data (1) to read requested (2) bytes" exception. TheContinuableRecordInputclass 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.
-
-
Constructor Summary
Constructors Constructor Description ContinuableRecordInput(RecordInputStream in)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intavailable()bytereadByte()doublereadDouble()voidreadFully(byte[] buf)voidreadFully(byte[] buf, int off, int len)intreadInt()longreadLong()voidreadPlain(byte[] buf, int off, int len)Usually acts the same asLittleEndianInput.readFully(byte[], int, int), but for an encrypted stream the raw (unencrypted) data is filledshortreadShort()intreadUByte()intreadUShort()
-
-
-
Constructor Detail
-
ContinuableRecordInput
public ContinuableRecordInput(RecordInputStream in)
-
-
Method Detail
-
available
public int available()
- Specified by:
availablein interfaceLittleEndianInput
-
readByte
public byte readByte()
- Specified by:
readBytein interfaceLittleEndianInput
-
readUByte
public int readUByte()
- Specified by:
readUBytein interfaceLittleEndianInput
-
readShort
public short readShort()
- Specified by:
readShortin interfaceLittleEndianInput
-
readUShort
public int readUShort()
- Specified by:
readUShortin interfaceLittleEndianInput
-
readInt
public int readInt()
- Specified by:
readIntin interfaceLittleEndianInput
-
readLong
public long readLong()
- Specified by:
readLongin interfaceLittleEndianInput
-
readDouble
public double readDouble()
- Specified by:
readDoublein interfaceLittleEndianInput
-
readFully
public void readFully(byte[] buf)
- Specified by:
readFullyin interfaceLittleEndianInput
-
readFully
public void readFully(byte[] buf, int off, int len)- Specified by:
readFullyin interfaceLittleEndianInput
-
readPlain
public void readPlain(byte[] buf, int off, int len)Description copied from interface:LittleEndianInputUsually acts the same asLittleEndianInput.readFully(byte[], int, int), but for an encrypted stream the raw (unencrypted) data is filled- Specified by:
readPlainin interfaceLittleEndianInput- Parameters:
buf- the byte array to receive the bytesoff- the start offset into the byte arraylen- the amount of bytes to fill
-
-