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

Delphi TReader 簡單資料型別讀取與列表處理機制完整源碼解析

     編輯:Delphi

5. 簡單資料型別讀取方法實現

涵蓋布爾、字元、整數、字串、浮點、集合、標識符。核心 ReadValue 讀取單一位元組型別標誌 (TValueType)。

ReadValue

function TReader.ReadValue: TValueType;
begin Read(Result, SizeOf(Result)); end;

各型別讀取邏輯

  • Integer:依 vaInt8/16/32 讀取 Shortint/Smallint/Longint
  • Boolean:vaTrue→True,vaFalse→False,型別標誌即值
  • String:vaString 讀 1 位元組長度,vaLString 讀 4 位元組長度,SetString 分配空間後 Read 填入
  • Float:vaExtended 直接讀;否則回退位置讀整數轉換
  • Char:檢查 vaString 且長度=1,否則報錯
  • Ident:vaIdent 讀長度+內容;vaFalse/True/Nil 直接回傳字串常數

注意:儲存格式為 Delphi 專有,讀寫必須配對使用 Writer 對應方法,讀取前以 NextValue 預檢否則觸發異常。

2. DefineProperty / DefineBinaryProperty 實現

比對屬性名 (CompareText) 相同則處理。二進制屬性:檢查 vaBinary 標誌 → 建立 TMemoryStream → 讀長度 → 讀資料至記憶體 → 呼叫 ReadData → 釋放串流。

3. FlushBuffer 實現

procedure TReader.FlushBuffer;
begin
  FStream.Position := FStream.Position - (FBufEnd - FBufPos);
  FBufPos := 0; FBufEnd := 0;
end;

同步串流位置與緩衝區狀態。

4. ReadListBegin / ReadListEnd / EndOfList

  • ReadListBegin:CheckValue(vaList)
  • ReadListEnd:CheckValue(vaNull)
  • EndOfList:檢測 vaNull 並 Dec(FBufPos) 回退

CheckValue 封裝:讀值比對,不符則 Dec(FBufPos)、SkipValue、觸發 PropValueError。TStrings.ReadData 示範標準列表讀取模式:ReadListBegin → Clear → 迴圈 EndOfList + ReadString + Add → ReadListEnd。

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