Position屬性的定義中包含了兩個讀寫控制方法
TWriter = class(TFiler)
private
FRootAncestor: TComponent;
…
function GetPosition: Longint;
procedure SetPosition(Value: Longint)
public
…
property Position: Longint read GetPosition write SetPosition;
property RootAncestor: TComponent read FRootAncestor write FRootAncestor;
end;
GetPosition和SetPosition方法實現如下
function TWriter
begin
Result := FStream
end;
procedure TWriter
var
StreamPosition: Longint;
begin
StreamPosition := FStream
{ 只清除越界的緩沖區 }
if (Value < StreamPosition) or (Value > StreamPosition + FBufPos) then
begin
WriteBuffer;
FStream
end
else FBufPos := Value
end;
WriteBuffer是TWriter對象定義的私有方法
在SetPosition方法中
⑴ WriteListBegin和WriteListEnd的實現
這兩個方法都是用於寫連續若干個相同類型的值
procedure TWriter
begin
WriteValue(vaList)
end;
procedure TWriter
begin
WriteValue(vaNull)
end;
這兩個方法都調用TWriter對象的WriteValue方法
procedure TWriter
begin
Write(Value
end;
⑵ 簡單數據類型的寫入
簡單數據類型指的是整型
WriteInteger方法用於寫入整型數據
procedure TWriter
begin
if (Value >=
begin
WriteValue(vaInt
Write(Value
end else
if (Value >=
begin
WriteValue(vaInt
Write(Value
end else
begin
WriteValue(vaInt
Write(Value
end;
end;
WriteInteger方法將整型數據分為
WriteBoolean用於寫入布爾型數據
procedure TWriter
begin
if Value then
WriteValue(vaTrue) else
WriteValue(vaFalse)
end;
與其它數據類型不同的是布爾型數據只使用了標志位是存儲布爾值
WriteFloat方法用於寫入浮點型數據
procedure TWriter
begin
WriteValue(vaExtended)
Write(Value
end;
字符串
WriteString方法用於寫入字符串
procedure TWriter
var
L: Integer;
begin
L := Length(Value)
if L <=
begin
WriteValue(vaString)
Write(L
end else
begin
WriteValue(vaLString)
Write(L
end;
Write(Pointer(Value)^
end;
Delphi的字符串類型有兩種
[
From:http://tw.wingwit.com/Article/program/Delphi/201311/25098.html