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

Delphi 第 20 章:開發物件導向資料管理功能(一)─ THandleStream、TFileStream 與 TMemoryStream 總覽

     編輯:Delphi

20.1.2 THandleStream 物件

THandleStream 行為類似 TFileStream,差異在於它透過已建立的檔案控制代碼而非檔名儲存資料。

屬性與方法

  • Handle 屬性:提供對檔案控制代碼的唯讀存取,可作為 RTL 檔案管理函數參數。
  • Create(AHandle: Integer):以傳入控制代碼建立串流物件。
  • Read/Write/Seek:覆寫 TStream 虛擬方法,實作針對檔案的資料存取(內部呼叫 Windows 檔案管理函數)。

實作原理

THandleStream 繼承自 TStream,主要新增 Handle 屬性並覆寫 Create、Read、Write、Seek 四個方法。

Handle 屬性實作

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 實作。

20.1.3 TFileStream 物件

TFileStream 繼承自 THandleStream,同樣實作檔案存取,差異在於以檔名而非控制代碼存取檔案。本質上是 THandleStream 的一層封裝,核心邏輯仍在父類別。

無新增屬性與方法,僅覆寫 Create 與 Destroy:

  • Create(FileName, Mode):以 FileCreate 或 FileOpen 開啟檔案,取得控制代碼賦予 FHandle。
  • Destroy:關閉檔案控制代碼。

檔案讀寫操作繼承自 THandleStream 的 Read/Write。

20.1.5 TMemoryStream 物件

TMemoryStream 管理動態記憶體中的資料,繼承自 TCustomMemoryStream,除繼承成員外,新增與覆寫了磁碟檔案讀取、記憶體寫入/清除等動態記憶體管理方法。

主要屬性與方法

成員說明
Capacity 屬性決定配置給記憶體串流的記憶體池大小(位元組),可設大於實際資料以避免頻繁重配。
Realloc 方法以 8K 為單位配置動態記憶體,回傳指向配置記憶體的指標。
SetSize 方法清除資料並設定記憶體池大小為 Size 位元組;Size=0 釋放記憶體池並設 Memory=nil。
Clear 方法釋放記憶體池,設 Memory=nil,Size 與 Position 歸零。
LoadFromStream 方法將指定串流全部內容複製到 MemoryStream,取代現有內容,形成完整拷貝。
LoadFromFile 方法將指定檔案所有內容複製到 MemoryStream,取代現有內容,形成檔案在記憶體中的完整拷貝。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved