涵蓋布爾、字元、整數、字串、浮點、集合、標識符。核心 ReadValue 讀取單一位元組型別標誌 (TValueType)。
function TReader.ReadValue: TValueType;
begin Read(Result, SizeOf(Result)); end;
vaInt8/16/32 讀取 Shortint/Smallint/LongintvaTrue→True,vaFalse→False,型別標誌即值vaString 讀 1 位元組長度,vaLString 讀 4 位元組長度,SetString 分配空間後 Read 填入vaExtended 直接讀;否則回退位置讀整數轉換vaString 且長度=1,否則報錯vaIdent 讀長度+內容;vaFalse/True/Nil 直接回傳字串常數注意:儲存格式為 Delphi 專有,讀寫必須配對使用 Writer 對應方法,讀取前以 NextValue 預檢否則觸發異常。
比對屬性名 (CompareText) 相同則處理。二進制屬性:檢查 vaBinary 標誌 → 建立 TMemoryStream → 讀長度 → 讀資料至記憶體 → 呼叫 ReadData → 釋放串流。
procedure TReader.FlushBuffer;
begin
FStream.Position := FStream.Position - (FBufEnd - FBufPos);
FBufPos := 0; FBufEnd := 0;
end;
同步串流位置與緩衝區狀態。
ReadListBegin:CheckValue(vaList)ReadListEnd:CheckValue(vaNull)EndOfList:檢測 vaNull 並 Dec(FBufPos) 回退CheckValue 封裝:讀值比對,不符則 Dec(FBufPos)、SkipValue、觸發 PropValueError。TStrings.ReadData 示範標準列表讀取模式:ReadListBegin → Clear → 迴圈 EndOfList + ReadString + Add → ReadListEnd。