Class SSTRecord
- java.lang.Object
-
- loci.poi.hssf.record.Record
-
- loci.poi.hssf.record.SSTRecord
-
public class SSTRecord extends Record
Title: Static String Table RecordDescription: This holds all the strings for LabelSSTRecords.
REFERENCE: PG 389 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)
- Author:
- Andrew C. Oliver (acoliver at apache dot org), Marc Johnson (mjohnson at apache dot org), Glen Stampoultzis (glens at apache.org)
- See Also:
LabelSSTRecord
,ContinueRecord
-
-
Field Summary
Fields Modifier and Type Field Description static short
sid
-
Constructor Summary
Constructors Constructor Description SSTRecord()
default constructorSSTRecord(RecordInputStream in)
Constructs an SST record and sets its fields appropriately.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int
addString(UnicodeString string)
Add a string.int
calcExtSSTRecordSize()
Calculates the size in bytes of the EXTSST record as it would be if the record was serialized.ExtSSTRecord
createExtSSTRecord(int sstOffset)
Creates an extended string record based on the current contents of the current SST record.boolean
equals(Object o)
protected void
fillFields(RecordInputStream in)
Fill the fields from the dataint
getNumStrings()
int
getNumUniqueStrings()
int
getRecordSize()
gives the current serialized size of the record.short
getSid()
return the non static version of the id for this record.UnicodeString
getString(int id)
Get a particular string by its indexint
hashCode()
boolean
isString16bit(int id)
int
serialize(int offset, byte[] data)
called by the class that is responsible for writing this sucker.void
setNumStrings(int count)
USE THIS METHOD AT YOUR OWN PERIL: THEaddString
METHODS MANIPULATE THE NUMBER OF STRINGS AS A SIDE EFFECT; YOUR ATTEMPTS AT MANIPULATING THE STRING COUNT IS LIKELY TO BE VERY WRONG AND WILL RESULT IN BAD BEHAVIOR WHEN THIS RECORD IS WRITTEN OUT AND ANOTHER PROCESS ATTEMPTS TO READ THE RECORDvoid
setNumUniqueStrings(int count)
USE THIS METHOD AT YOUR OWN PERIL: THEaddString
METHODS MANIPULATE THE NUMBER OF UNIQUE STRINGS AS A SIDE EFFECT; YOUR ATTEMPTS AT MANIPULATING THE UNIQUE STRING COUNT IS LIKELY TO BE VERY WRONG AND WILL RESULT IN BAD BEHAVIOR WHEN THIS RECORD IS WRITTEN OUT AND ANOTHER PROCESS ATTEMPTS TO READ THE RECORDString
toString()
Return a debugging string representationprotected void
validateSid(short id)
validate SID-
Methods inherited from class loci.poi.hssf.record.Record
clone, isInValueSection, isValue, serialize
-
-
-
-
Field Detail
-
sid
public static final short sid
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
SSTRecord
public SSTRecord()
default constructor
-
SSTRecord
public SSTRecord(RecordInputStream in)
Constructs an SST record and sets its fields appropriately.- Parameters:
in
- the RecordInputstream to read the record from
-
-
Method Detail
-
addString
public int addString(UnicodeString string)
Add a string.- Parameters:
string
- string to be added- Returns:
- the index of that string in the table
-
getNumStrings
public int getNumStrings()
- Returns:
- number of strings
-
getNumUniqueStrings
public int getNumUniqueStrings()
- Returns:
- number of unique strings
-
setNumStrings
public void setNumStrings(int count)
USE THIS METHOD AT YOUR OWN PERIL: THEaddString
METHODS MANIPULATE THE NUMBER OF STRINGS AS A SIDE EFFECT; YOUR ATTEMPTS AT MANIPULATING THE STRING COUNT IS LIKELY TO BE VERY WRONG AND WILL RESULT IN BAD BEHAVIOR WHEN THIS RECORD IS WRITTEN OUT AND ANOTHER PROCESS ATTEMPTS TO READ THE RECORD- Parameters:
count
- number of strings
-
setNumUniqueStrings
public void setNumUniqueStrings(int count)
USE THIS METHOD AT YOUR OWN PERIL: THEaddString
METHODS MANIPULATE THE NUMBER OF UNIQUE STRINGS AS A SIDE EFFECT; YOUR ATTEMPTS AT MANIPULATING THE UNIQUE STRING COUNT IS LIKELY TO BE VERY WRONG AND WILL RESULT IN BAD BEHAVIOR WHEN THIS RECORD IS WRITTEN OUT AND ANOTHER PROCESS ATTEMPTS TO READ THE RECORD- Parameters:
count
- number of strings
-
getString
public UnicodeString getString(int id)
Get a particular string by its index- Parameters:
id
- index into the array of strings- Returns:
- the desired string
-
isString16bit
public boolean isString16bit(int id)
-
toString
public String toString()
Return a debugging string representation
-
getSid
public short getSid()
Description copied from class:Record
return the non static version of the id for this record.
-
validateSid
protected void validateSid(short id) throws RecordFormatException
validate SID- Specified by:
validateSid
in classRecord
- Parameters:
id
- the alleged SID- Throws:
RecordFormatException
- if validation fails
-
fillFields
protected void fillFields(RecordInputStream in)
Fill the fields from the dataThe data consists of sets of string data. This string data is arranged as follows:
short string_length; // length of string data byte string_flag; // flag specifying special string // handling short run_count; // optional count of formatting runs int extend_length; // optional extension length char[] string_data; // string data, can be byte[] or // short[] (length of array is // string_length) int[] formatting_runs; // optional formatting runs (length of // array is run_count) byte[] extension; // optional extension (length of array // is extend_length)
The string_flag is bit mapped as follows:
Bit number Meaning if 0 Meaning if 1 0 string_data is byte[] string_data is short[] 1 Should always be 0 string_flag is defective 2 extension is not included extension is included 3 formatting run data is not included formatting run data is included 4 Should always be 0 string_flag is defective 5 Should always be 0 string_flag is defective 6 Should always be 0 string_flag is defective 7 Should always be 0 string_flag is defective We can handle eating the overhead associated with bits 2 or 3 (or both) being set, but we have no idea what to do with the associated data. The UnicodeString class can handle the byte[] vs short[] nature of the actual string data
- Specified by:
fillFields
in classRecord
- Parameters:
in
- the RecordInputstream to read the record from
-
serialize
public int serialize(int offset, byte[] data)
called by the class that is responsible for writing this sucker. Subclasses should implement this so that their data is passed back in a byte array.
-
getRecordSize
public int getRecordSize()
Description copied from class:Record
gives the current serialized size of the record. Should include the sid and reclength (4 bytes).- Overrides:
getRecordSize
in classRecord
-
createExtSSTRecord
public ExtSSTRecord createExtSSTRecord(int sstOffset)
Creates an extended string record based on the current contents of the current SST record. The offset within the stream to the SST record is required because the extended string record points directly to the strings in the SST record.NOTE: THIS FUNCTION MUST ONLY BE CALLED AFTER THE SST RECORD HAS BEEN SERIALIZED.
- Parameters:
sstOffset
- The offset in the stream to the start of the SST record.- Returns:
- The new SST record.
-
calcExtSSTRecordSize
public int calcExtSSTRecordSize()
Calculates the size in bytes of the EXTSST record as it would be if the record was serialized.- Returns:
- The size of the ExtSST record in bytes.
-
-