@Override
	public void init()
	{
		super.init();
		lc = getByteAt( 0 );
		fc = getByteAt( 1 );
		rowIndex = ByteTools.readShort( getByteAt( 2 ), getByteAt( 3 ) );
		int pos = 4;
		for( int i = 0; i < ((lc - fc) + 1); i++ )
		{
			try
			{
				int type = getByteAt( pos++ );
				switch( type )
				{
					case 0:    // empty
						pos += 8;
						break;
					case 1:    // numeric
						cachedValues.add( new Float( ByteTools.eightBytetoLEDouble( getBytesAt( pos, 8 ) ) ) );
						pos += 8;
						break;
					case 2: // string
						short ln = ByteTools.readShort( getByteAt( pos ), getByteAt( pos + 1 ) );
						byte encoding = getByteAt( pos + 2 );
						pos += 3;
						if( encoding == 0 )
						{
							cachedValues.add( new String( getBytesAt( pos, ln ) ) );
							pos += ln;
						}
						else
						{// unicode
							cachedValues.add( new String( getBytesAt( pos, ln * 2 ), "UTF-16LE" ) );
							pos += ln * 2;
						}
						break;
					case 4: // boolean
						cachedValues.add( getByteAt( pos + 1 ) == 1 );
						pos += 8;
						break;
					case 16: // error
						cachedValues.add( new String( "Error Code: " + getByteAt( pos + 1 ) ) );
						pos += 8;
						break;
				}
			}
			catch( Exception e )
			{

			}
		}
	}