談Delphi程式設計中「流」的應用

2021-04-13 01:42:35 字數 2767 閱讀 5185

什麼是流?流,簡單來說就是建立在物件導向基礎上的一種抽象的處理資料的工具。在流中,定義了一些處理資料的基本操作,如讀取資料,寫入資料等,程式設計師是對流進行所有操作的,而不用關心流的另一頭資料的真正流向。流不但可以處理檔案,還可以處理動態記憶體、網路資料等多種資料形式。如果你對流的操作非常熟練,在程式中利用流的方便性,寫起程式會大大提高效率的。  

下面,筆者通過四個例項:exe檔案加密器、電子賀卡、自製oicq和網路螢幕傳輸來說明delphi程式設計中「流」的利用。這些例子中的一些技巧曾經是很多軟體的秘密而不公開的,現在大家可以無償的直接引用其中的**了。  

「萬丈高樓平地起」,在分析例項之前,我們先來了解一下流的基本概念和函式,只有在理解了這些基本的東西後我們才能進行下一步。請務必認真領會這些基本方法。當然,如果你對它們已經很熟悉了,則可以跳過這一步。  

一、delphi中流的基本概念及函式宣告  

在delphi中,所有流物件的基類為tstream類,其中定義了所有流的共同屬性和方法。  

tstream類中定義的屬性介紹如下:  

1、size:此屬性以位元組返回流中資料大小。  

2、position:此屬性控制流中訪問指標的位置。  

tstream中定義的虛方法有四個:  

1、read:此方法實現將資料從流中讀出。函式原形為:  

function   read(var   buffer;count:longint):longint;virtual;abstract;  

引數buffer為資料讀出時放置的緩衝區,count為需要讀出的資料的位元組數,該方法返回值為實際讀出的位元組數,它可以小於或等於count中指定的值。  

2、write:此方法實現將資料寫入流中。函式原形為:  

function   write(var   buffer;count:longint):longint;virtual;abstract;  

引數buffer為將要寫入流中的資料的緩衝區,count為資料的長度位元組數,該方法返回值為實際寫入流中的位元組數。  

3、seek:此方法實現流中讀取指標的移動。函式原形為:  

function   seek(offset:longint;origint:word):longint;virtual;abstract;  

引數offset為偏移位元組數,引數origint指出offset的實際意義,其可能的取值如下:  

sofrombeginning:offset為移動後指標距離資料開始的位置。此時offset必須大於或者等於零。  

sofromcurrent:offset為移動後指標與當前指標的相對位置。  

sofromend:offset為移動後指標距離資料結束的位置。此時offset必須小於或者等於零。該方法返回值為移動後指標的位置。   

4、setsize:此方法實現改變資料的大小。函式原形為:  

function   setsize(newsize:longint);virtual;  

另外,tstream類中還定義了幾個靜態方法:  

1、readbuffer:此方法的作用是從流中當前位置讀取資料。函式原形為:  

procedure   readbuffer(var   buffer;count:longint);  

引數的定義跟上面的read相同。注意:當讀取的資料位元組數與需要讀取的位元組數不相同時,將產生ereaderror異常。  

2、writebuffer:此方法的作用是在當前位置向流寫入資料。函式原形為:  

procedure   writebuffer(var   buffer;count:longint);  

引數的定義跟上面的write相同。注意:當寫入的資料位元組數與需要寫入的位元組數不相同時,將產生ewriteerror異常。  

3、copyfrom:此方法的作用是從其它流中拷貝資料流。函式原形為:  

function   copyfrom(source:tstream;count:longint):longint;  

引數source為提供資料的流,count為拷貝的資料位元組數。當count大於0時,copyfrom從source引數的當前位置拷貝count個位元組的資料;當count等於0時,copyfrom設定source引數的position屬性為0,然後拷貝source的所有資料;  

tstream還有其它派生類,其中最常用的是tfilestream類。使用tfilestream類來訪問檔案,首先要建立乙個例項。宣告如下:  

constructor   create(const   filename:string;mode:word);  

filename為檔名(包括路徑),引數mode為開啟檔案的方式,它包括檔案的開啟模式和共享模式,其可能的取值和意義如下:  

開啟模式:  

fmcreate   :用指定的檔名建立檔案,如果檔案已經存在則開啟它。  

fmopenread   :以唯讀方式開啟指定檔案  

fmopenwrite   :以只寫方式開啟指定檔案  

fmopenreadwrite:以寫寫方式開啟指定檔案  

共享模式:  

fmsharecompat   :共享模式與fcbs相容  

fmshareexclusive:不允許別的程式以任何方式開啟該檔案  

fmsharedenywrite:不允許別的程式以寫方式開啟該檔案  

fmsharedenyread   :不允許別的程式以讀方式開啟該檔案  

fmsharedenynone   :別的程式可以以任何方式開啟該檔案   

Delphi執行緒的初級應用

viewradio th執行緒函式在form外生命全域性變數 函式內相應的區域性變數可以接收全域性變數的賦值進行操作 query等可以自行建立進行查詢 這樣結果不會改變。下面是後台傳送字幕的執行緒函式應用。var ldate,ldatetime string lhandle thandle dloo...

LUA與Delphi的基礎應用

lua基本的用法.1。開啟lua view plaincopy to clipboardprint?var l plua state 開啟lua l lua open 這時也可以繼續裝載lua標準庫 lua baselibopen l lua iolibopen l lua strlibopen l...

企業應用的開發層次(DELPHI

總體的層次如下 view presenter task dao 貫穿所有層次 傳遞 的元素只有乙個 dto data transfer object 1 view 由iview 介面類 和 ui 實現類 組成。通常c s下的ui是form和frame,b s下就是一張page嘍,ui的所有邏輯都委託...