首页 / 软件开发 / Delphi / 第二十章-开发Delphi对象式数据管理功能(三)(5)
第二十章-开发Delphi对象式数据管理功能(三)(5)2007-05-072. TWriter方法的实现⑴ WriteListBegin和WriteListEnd的实现这两个方法都是用于写连续若干个相同类型的值。WriteListBegin写入VaList标志,WriteListEnd写入VaNull标志。procedure TWriter.WriteListBegin;beginWriteValue(vaList);end;procedure TWriter.WriteListEnd;beginWriteValue(vaNull);end;这两个方法都调用TWriter对象的WriteValue方法,该方法主要用于写入TValueType类型的值。procedure TWriter.WriteValue(Value: TValueType);beginWrite(Value, SizeOf(Value)); end;⑵ 简单数据类型的写入简单数据类型指的是整型、字符型、字符串型、浮点型、布尔型等。TWriter对象都定义了相应的写入方法。WriteInteger方法用于写入整型数据。procedure TWriter.WriteInteger(Value: Longint);beginif (Value >= -128) and (Value <= 127) thenbeginWriteValue(vaInt8);Write(Value, SizeOf(Shortint));end elseif (Value >= -32768) and (Value <= 32767) thenbeginWriteValue(vaInt16);Write(Value, SizeOf(Smallint));end elsebeginWriteValue(vaInt32);Write(Value, SizeOf(Longint));end;end;WriteInteger方法将整型数据分为8位、16位和32位三种,并分别用vaInt8、vaInt16和VaInt32。WriteBoolean用于写入布尔型数据:procedure TWriter.WriteBoolean(Value: Boolean);beginif Value thenWriteValue(vaTrue) elseWriteValue(vaFalse);end;与其它数据类型不同的是布尔型数据只使用了标志位是存储布尔值,在标志位后没有数据。WriteFloat方法用于写入浮点型数据。procedure TWriter.WriteFloat(Value: Extended);beginWriteValue(vaExtended);Write(Value, SizeOf(Extended));end;字符串“True”、“False”和“nil”作为标识符传入是由于Delphi的特殊需要。如果是“True”、“False”和“nil”则写入VaTrue、VaFalse和VaNil,否则写入VaIdent标志,接着以字符串形式写入标识符。WriteString方法用于写入字符串procedure TWriter.WriteString(const Value: string);varL: Integer;beginL := Length(Value);if L <= 255 thenbeginWriteValue(vaString);Write(L, SizeOf(Byte));end elsebeginWriteValue(vaLString);Write(L, SizeOf(Integer));end;Write(Pointer(Value)^, L);end;Delphi的字符串类型有两种。一种长度小于256个字节,另一种长度小于65536 个字节。WriteString方法区分这两类情况存储字符串,一种设置VaStirng标志,另一种设置VaLString。然后存储字符串的长度值,最后存储字符串数据。WriteChar方法用于写入字符。procedure TWriter.WriteChar(Value: Char);beginWriteString(Value);end;字符类型的读写是用读写字符串的方法,在读的时候,判断字节数为1时,则为字符型。