THandleStream 行為類似 TFileStream,差異在於它透過已建立的檔案控制代碼而非檔名儲存資料。
TStream 虛擬方法,實作針對檔案的資料存取(內部呼叫 Windows 檔案管理函數)。THandleStream 繼承自 TStream,主要新增 Handle 屬性並覆寫 Create、Read、Write、Seek 四個方法。
property Handle: Integer read FHandle;
私有欄位 FHandle 儲存控制代碼,屬性唯讀直接回傳。
constructor THandleStream.Create(AHandle: Integer); begin FHandle := AHandle; end; function THandleStream.Read(var Buffer; Count: Longint): Longint; begin Result := FileRead(FHandle, Buffer, Count); if Result = -1 then Result := 0; end; function THandleStream.Write(const Buffer; Count: Longint): Longint; begin Result := FileWrite(FHandle, Buffer, Count); if Result = -1 then Result := 0; end; function THandleStream.Seek(Offset: Longint; Origin: Word): Longint; begin Result := FileSeek(FHandle, Offset, Origin); end;
三個方法分別呼叫 FileRead、FileWrite、FileSeek 實作。
TFileStream 繼承自 THandleStream,同樣實作檔案存取,差異在於以檔名而非控制代碼存取檔案。本質上是 THandleStream 的一層封裝,核心邏輯仍在父類別。
無新增屬性與方法,僅覆寫 Create 與 Destroy:
Create(FileName, Mode):以 FileCreate 或 FileOpen 開啟檔案,取得控制代碼賦予 FHandle。Destroy:關閉檔案控制代碼。檔案讀寫操作繼承自 THandleStream 的 Read/Write。
TMemoryStream 管理動態記憶體中的資料,繼承自 TCustomMemoryStream,除繼承成員外,新增與覆寫了磁碟檔案讀取、記憶體寫入/清除等動態記憶體管理方法。
| 成員 | 說明 |
|---|---|
| Capacity 屬性 | 決定配置給記憶體串流的記憶體池大小(位元組),可設大於實際資料以避免頻繁重配。 |
| Realloc 方法 | 以 8K 為單位配置動態記憶體,回傳指向配置記憶體的指標。 |
| SetSize 方法 | 清除資料並設定記憶體池大小為 Size 位元組;Size=0 釋放記憶體池並設 Memory=nil。 |
| Clear 方法 | 釋放記憶體池,設 Memory=nil,Size 與 Position 歸零。 |
| LoadFromStream 方法 | 將指定串流全部內容複製到 MemoryStream,取代現有內容,形成完整拷貝。 |
| LoadFromFile 方法 | 將指定檔案所有內容複製到 MemoryStream,取代現有內容,形成檔案在記憶體中的完整拷貝。 |