程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 流操作的語法

流操作的語法

編輯:Delphi

流操作的語法

Delphi在這兩方面都做的相當出色。在Delphi的早期版本Turbo Pascal 中就曾有流(Stream)、群(Collection)和資源(Resource)等專門用於對象式數據管理的類。在Delphi中,這些功能得到了大大的加強。Delphi將對象式數據管理類歸結為Stream對象(Stream)和Filer對象(Filer),並將它們應用於可視部件類庫(VCL)的方方面面。它們不僅提供了在內存、外存和Windows資源中管理對象的功能,還提供了在數據庫BLOB字段中對象的功能。

  在本章中將介紹Stream對象和Filer對象的實現原理、應用方法以及在超媒體系統中的應用。這對於運用Delphi 開發高級應用是很重要的。 

20.1 流式對象的實現原理和應用

 

  Stream對象,又稱流式對象,是TStream、THandleStream、TFileStream、TMemoryStream、TResourceStream和TBlobStream等的統稱。它們分別代表了在各種媒介上存儲數據的能力,它們將各種數據類型(包括對象和部件) 在內存、外存和數據庫字段中的管理操作抽象為對象方法,並且充分利用了面向對象技術的優點,應用程序可以相當容易地在各種Stream對象中拷貝數據。

  下面介紹各種對象的數據和方法及使用方法。

 

20.1.1 TStream對象

 

  TStream對象是能在各種媒介中存儲二進制數據的對象的抽象對象。從TStream 對象繼承的對象用於在內存、Windows資源文件、磁盤文件和數據庫字段等媒介中存儲數據。

  TStream中定義了兩個屬性:Size和Position。它們分別以字節為單位表示的流的大小和當前指針位置。TStream中定義的方法用於在各種流中讀、寫和相互拷貝二進制數據。因為所有的Stream對象都是從TStream中繼承來的,所以在TStream中定義的域和方法都能被Stream對象調用和訪問。此外,又由於面向對象技術的動態聯編功能,TStream為各種流的應用提供了統一的接口,簡化了流的使用;不同Stream對象是抽象了對不同存儲媒介的數據上的操作,因此,TStream的需方法為在不同媒介間的數據拷貝提供了最簡捷的手段。

 

20.1.1.1 TStream的屬性和方法

 

  1. Position屬性 

聲明:property Position: Longint;

  Position屬性指明流中讀寫的當前偏移量。

  2. Size屬性

  聲明:property Size: Longint;

Size屬性指明了以字節為單位的流的的大小,它是只讀的。

  3. CopyFrom方法

  聲明:function CopyFrom(Source: TStream; Count: Longint): Longint;

CopyFrom從Source所指定的流中拷貝Count個字節到當前流中, 並將指針從當前位置移動Count個字節數,函數返回值是實際拷貝的字節數。

  4. Read方法

  聲明:function Read(var Buffer; Count: Longint): Longint; virtual; abstract;

Read方法從當前流中的當前位置起將Count個字節的內容復制到Buffer中,並把當前指針向後移動Count個字節數,函數返回值是實際讀的字節數。如果返回值小於Count,這意味著讀操作在讀滿所需字節數前指針已經到達了流的尾部。

  Read方法是抽象方法。每個後繼Stream對象都要根據自己特有的有關特定存儲媒介的讀操作覆蓋該方法。而且流的所有其它的讀數據的方法(如:ReadBuffer,ReadComponent等)在完成實際的讀操作時都調用了Read方法。面向對象的動態聯編的優點就體現在這兒。因為後繼Stream對象只需覆蓋Read方法,而其它讀操作(如ReadBuffer、ReadComponent等)都不需要重新定義,而且TStream還提供了統一的接口。

  5. ReadBuffer方法

  聲明:procedure ReadBuffer(var Buffer; Count: Longint);

  ReadBuffer方法從流中將Count個字節復制到Buffer 中, 並將流的當前指針向後移動Count個字節。如讀操作超過流的尾部,ReadBuffer方法引起EReadError異常事件。

  6. ReadComponent方法

  聲明:function ReadComponent(Instance: TComponent): TComponent;

ReadComponent方法從當前流中讀取由Instance所指定的部件,函數返回所讀的部件。ReadComponent在讀Instance及其擁有的所有對象時創建了一個Reader對象並調用它的ReadRootComponent方法。

  如果Instance為nil,ReadComponent的方法基於流中描述的部件類型信息創建部件,並返回新創建的部件。

  7. ReadComponentRes方法

  聲明:function ReadComponentRes(Instance: TComponent): TComponent;

ReadComponentRes方法從流中讀取Instance指定的部件,但是流的當前位置必須是由WriteComponentRes方法所寫入的部件的位置。

  ReadComponentRes 首先調用ReadResHeader方法從流中讀取資源頭,然後調用ReadComponent方法讀取Instance。如果流的當前位置不包含一個資源頭。ReadResHeader將引發一個EInv

[1] [2] [3] [4] [5] [6] 下一頁

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved