FileDocCategorySizeDatePackage
StringRecord.javaAPI DocApache Poi 3.0.16053Mon Jan 01 12:39:40 GMT 2007org.apache.poi.hssf.record

StringRecord

public class StringRecord extends Record
Supports the STRING record structure.
author
Glen Stampoultzis (glens at apache.org)

Fields Summary
public static final short
sid
private int
field_1_string_length
private byte
field_2_unicode_flag
private String
field_3_string
Constructors Summary
public StringRecord()



     
    
    
public StringRecord(RecordInputStream in)
Constructs a String record and sets its fields appropriately.

param
id id must be 0x204 or an exception will be throw upon validation
param
size the size of the data area of the record
param
data data of the record (should not contain sid/len)

        super(in);
    
Methods Summary
public java.lang.Objectclone()

        StringRecord rec = new StringRecord();
        rec.field_1_string_length = this.field_1_string_length;
        rec.field_2_unicode_flag= this.field_2_unicode_flag;
        rec.field_3_string = this.field_3_string;
        return rec;

    
protected voidfillFields(org.apache.poi.hssf.record.RecordInputStream in)
called by the constructor, should set class level fields. Should throw runtime exception for bad/icomplete data.

param
data raw data
param
size size of data
param
offset of the record's data (provided a big array of the file)

        field_1_string_length           = in.readShort();
        field_2_unicode_flag            = in.readByte();
        byte[] data = in.readRemainder();
        //Why isnt this using the in.readString methods???
        if (isUnCompressedUnicode())
        {
            field_3_string = StringUtil.getFromUnicodeLE(data, 0, field_1_string_length );
        }
        else
        {
            field_3_string = StringUtil.getFromCompressedUnicode(data, 0, field_1_string_length);
        }
    
public intgetRecordSize()
gives the current serialized size of the record. Should include the sid and reclength (4 bytes).

        return 4 + 2 + 1 + getStringByteLength();
    
public shortgetSid()
return the non static version of the id for this record.

        return sid;
    
public java.lang.StringgetString()

return
The string represented by this record.

        return field_3_string;
    
private intgetStringByteLength()

        return isUnCompressedUnicode() ? field_1_string_length * 2 : field_1_string_length;
    
public booleanisInValueSection()

        return true;
    
public booleanisUnCompressedUnicode()
is this uncompressed unicode (16bit)? Or just 8-bit compressed?

return
isUnicode - True for 16bit- false for 8bit

        return (field_2_unicode_flag == 1);
    
public intserialize(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.

param
offset to begin writing at
param
data byte array containing instance data
return
number of bytes written

        LittleEndian.putShort(data, 0 + offset, sid);
        LittleEndian.putShort(data, 2 + offset, ( short ) (3 + getStringByteLength()));
        LittleEndian.putUShort(data, 4 + offset, field_1_string_length);
        data[6 + offset] = field_2_unicode_flag;
        if (isUnCompressedUnicode())
        {
            StringUtil.putUnicodeLE(field_3_string, data, 7 + offset);
        }
        else
        {
            StringUtil.putCompressedUnicode(field_3_string, data, 7 + offset);
        }
        return getRecordSize();
    
public voidsetCompressedFlag(byte unicode_flag)
Sets whether the string is compressed or not

param
unicode_flag 1 = uncompressed, 0 = compressed

        this.field_2_unicode_flag = unicode_flag;
    
public voidsetString(java.lang.String string)
Sets the string represented by this record.

        this.field_1_string_length = string.length();
        this.field_3_string = string;
        setCompressedFlag(StringUtil.hasMultibyte(string) ?  (byte)1 : (byte)0);        
    
public java.lang.StringtoString()

        StringBuffer buffer = new StringBuffer();

        buffer.append("[STRING]\n");
        buffer.append("    .string            = ")
            .append(field_3_string).append("\n");
        buffer.append("[/STRING]\n");
        return buffer.toString();
    
protected voidvalidateSid(short id)
Throw a runtime exception in the event of a record passed with a differing ID.

param
id alleged id for this record

        if (id != sid)
        {
            throw new RecordFormatException("Not a valid StringRecord");
        }