首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi TWriter 內部實現機制:屬性管理、緩衝區控制與資料儲存格式

     編輯:Delphi

20.2.2.2 TWriter 物件實現詳解

資料儲存格式基礎

  • 每個 Filer 串流開頭 4 位元組為標誌 TPF0,供 WriteSignature/ReadSignature 存取
  • 每個資料項目前綴 1 位元組型別標誌 (TValueType),列舉值:vaNull、vaList、vaInt8/16/32、vaExtended、vaString、vaIdent、vaFalse/True、vaBinary、vaSet、vaLString、vaNil、vaCollection
  • vaList 標識連續同型項目開始,vaNull 標識結束。寫入用 WriteListBegin/End,讀取用 ReadListBegin/End + EndOfList

Writer 寫入先寫標誌再寫資料;Reader 讀取先讀標誌判斷,符合才讀資料否則異常。

1. TWriter 屬性實現

直接繼承 TFiler,新增 Position、RootAncestor。
RootAncestor:private FRootAncestor,直接讀寫。
Position:含 GetPosition/SetPosition 存取控制。

Position 存取控制實現

function TWriter.GetPosition: Longint;
begin Result := FStream.Position + FBufPos; end;

procedure TWriter.SetPosition(Value: Longint);
var StreamPosition: Longint;
begin
  StreamPosition := FStream.Position;
  if (Value < StreamPosition) or (Value > StreamPosition + FBufPos) then
  begin
    WriteBuffer; { 刷新緩衝區 }
    FStream.Position := Value;
  end
  else FBufPos := Value - StreamPosition;
end;

WriteBuffer 為私有方法,將緩衝區有效資料寫入串流並歸零 FBufPos。FlushBuffer 即呼叫 WriteBuffer。
邏輯:設定位置超出緩衝區範圍 → 刷新緩衝區並重設串流位置;否則僅移動緩衝區指標 FBufPos。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved