TWriter 元件寫入相關方法:WriteSignature、WritePrefix、WriteComponent、WriteDescendant、WriteRootComponent。
procedure TWriter.WriteSignature;
begin Write(FilerSignature, SizeOf(FilerSignature)); end;
FilerSignature = 'TPF0'。
寫入 ffInherited/ffChildPos 標誌。Prefix := $F0 or Byte(Flags),若 ffChildPos 置位再寫入建立序號。
procedure TWriter.WriteComponent(Component: TComponent);
begin
Include(Component.FComponentState, csWriting);
if Assigned(FAncestorList) then Ancestor := FindAncestor(Component.Name);
Component.WriteState(Self);
Exclude(Component.FComponentState, csWriting);
end;
透過 WriteState 寫入屬性,前後以 csWriting 標記。
procedure TWriter.WriteDescendant(Root, AAncestor: TComponent);
begin
FRootAncestor := AAncestor; FAncestor := AAncestor; FRoot := Root;
WriteSignature; WriteComponent(Root);
end;
procedure TWriter.WriteRootComponent(Root: TComponent);
begin WriteDescendant(Root, nil); end;
WriteRootComponent 以 nil 祖先呼叫 WriteDescendant,即完整寫入。
procedure TWriter.WriteListBegin; begin WriteValue(vaList); end;
procedure TWriter.WriteListEnd; begin WriteValue(vaNull); end;
procedure TWriter.WriteValue(Value: TValueType);
begin Write(Value, SizeOf(Value)); end;
vaInt8 (1 位元組)、vaInt16 (2 位元組)、vaInt32 (4 位元組)vaTrue/vaFalse,無資料位元組vaExtended + 10 位元組資料vaString + 1 位元組長度;否則 vaLString + 4 位元組長度。最後寫入字串內容WriteString,讀取時判斷長度=1 識別True/False/nil 寫對應標誌;其他寫 vaIdent + 長度 + 內容