20.2.1.2 TFiler對象的實現原理
TFiler對象是Filer對象的基礎類,它定義的大多數方法都是抽象類型的,沒有具體實現它,這些方法要在TReader和TWrite中覆蓋。但它們提供了Filer對象的框架,了解它無疑是很重要的。
1. TFiler對象屬性的實現
TFiler對象定義了三個屬性:Root、Ancestor和IgnoreChildren。正如定義對象屬性通常所采用的方法那樣,要在private部分定義存儲屬性值的數據域,然後在public或Published部分定義該屬性,並按需要增加讀寫控制。它們的定義如下:
TFiler = class(TObject)
private
…
FRoot: TComponent;
FAncestor: TPersistent;
FIgnoreChildren: Boolean;
public
…
property Root: TComponent read FRoot write FRoot;
property Ancestor: TPersistent read FAncestor write FAncestor;
property IgnoreChildren: Boolean read FIgnoreChildren write FIgnoreChildren;
end;
它們在讀寫控制上都是直接讀寫私有的數據域。
在介紹TReader和TWriter的實現,我們還會看到這幾個屬性的原理介紹。
2. TFiler對象方法的實現
在TFiler對象定義的眾多方法中很多都是抽象類方法,沒有具體實現。在TFiler 的後繼對象TReader中覆蓋了這些方法。在後面章節,會介紹這些方法的實現。
在TFiler對象中有具體實現的有兩個方法Create和Destroy。
⑴ Create方法的實現
Create方法是TFiler的構造方法,它有兩個參數Stream和BufSize。Stream是指定與TFiler對象相聯系的Stream對象,Filer對象都是用Stream對象完成具體的讀寫。BufSize是TFiler對象內部開設的緩沖區的大小。Filer對象內部開設緩沖區是為了加快數據的讀寫,它的實現如下:
constructor TFiler.Create(Stream: TStream; BufSize: Integer);
begin
FStream := Stream;
GetMem(FBuffer, BufSize);
FBufSize := BufSize;
end;
FStream、FBuffer和FBufSize都是TFiler在private部分定義的數據域。FStream表示與Filer對象相聯的Stream對象,FBuffer指向Filer對象內部開設的緩沖區,FBufSize是內部緩沖區的大小。Create方法用Stream參數值給FStream賦值,然後用GetMem分配BufSize大小的動態內存作為內部緩沖區。
⑵ Destroy方法的實現
Destroy方法是TFiler對象的析構函數,它的作用就是釋放動態內存。
destructor TFiler.Destroy;
begin
if FBuffer <> nil then FreeMem(FBuffer, FBufSize);
end;
20.2.2 TWriter對象
TWriter 對象是可實例化的,往流中寫數據的Filer對象。TWriter對象直接從TFiler繼承而來,除了覆蓋從TFiler繼承的方法外,還增加了大量的關於寫各種數據類型(如Integer、String和Component等)的方法。TWriter對象和TReader 對象配合使用將使對象讀寫發揮巨大作用。