Welcome

首页 / 软件开发 / Delphi / 第二十章-开发Delphi对象式数据管理功能(三)(5)

第二十章-开发Delphi对象式数据管理功能(三)(5)2007-05-072. TWriter方法的实现

⑴ WriteListBegin和WriteListEnd的实现

这两个方法都是用于写连续若干个相同类型的值。WriteListBegin写入VaList标志,WriteListEnd写入VaNull标志。

procedure TWriter.WriteListBegin;

begin

WriteValue(vaList);

end;

procedure TWriter.WriteListEnd;

begin

WriteValue(vaNull);

end;

这两个方法都调用TWriter对象的WriteValue方法,该方法主要用于写入TValueType类型的值。

procedure TWriter.WriteValue(Value: TValueType);

begin

Write(Value, SizeOf(Value));

end;

⑵ 简单数据类型的写入

简单数据类型指的是整型、字符型、字符串型、浮点型、布尔型等。TWriter对象都定义了相应的写入方法。

WriteInteger方法用于写入整型数据。

procedure TWriter.WriteInteger(Value: Longint);

begin

if (Value >= -128) and (Value <= 127) then

begin

WriteValue(vaInt8);

Write(Value, SizeOf(Shortint));

end else

if (Value >= -32768) and (Value <= 32767) then

begin

WriteValue(vaInt16);

Write(Value, SizeOf(Smallint));

end else

begin

WriteValue(vaInt32);

Write(Value, SizeOf(Longint));

end;

end;

WriteInteger方法将整型数据分为8位、16位和32位三种,并分别用vaInt8、vaInt16和VaInt32。

WriteBoolean用于写入布尔型数据:

procedure TWriter.WriteBoolean(Value: Boolean);

begin

if Value then

WriteValue(vaTrue) else

WriteValue(vaFalse);

end;

与其它数据类型不同的是布尔型数据只使用了标志位是存储布尔值,在标志位后没有数据。

WriteFloat方法用于写入浮点型数据。

procedure TWriter.WriteFloat(Value: Extended);

begin

WriteValue(vaExtended);

Write(Value, SizeOf(Extended));

end;

字符串“True”、“False”和“nil”作为标识符传入是由于Delphi的特殊需要。如果是“True”、“False”和“nil”则写入VaTrue、VaFalse和VaNil,否则写入VaIdent标志,接着以字符串形式写入标识符。

WriteString方法用于写入字符串

procedure TWriter.WriteString(const Value: string);

var

L: Integer;

begin

L := Length(Value);

if L <= 255 then

begin

WriteValue(vaString);

Write(L, SizeOf(Byte));

end else

begin

WriteValue(vaLString);

Write(L, SizeOf(Integer));

end;

Write(Pointer(Value)^, L);

end;

Delphi的字符串类型有两种。一种长度小于256个字节,另一种长度小于65536 个字节。WriteString方法区分这两类情况存储字符串,一种设置VaStirng标志,另一种设置VaLString。然后存储字符串的长度值,最后存储字符串数据。

WriteChar方法用于写入字符。

procedure TWriter.WriteChar(Value: Char);

begin

WriteString(Value);

end;

字符类型的读写是用读写字符串的方法,在读的时候,判断字节数为1时,则为字符型。