前言:所謂"流", 就是一段數據或是一塊內存;
在進行流操作時, 我們不必關心流中的數據到底是什麼; 只需要知道流的大小和當前的指針位置. 所以流只有兩個屬性:
Size、Position.
對流的操作, 不過就是讀取和寫入. 所以流最主要的方法就是 Read 和 Write.
在很多控件的使用中, 讀取主要用 LoadFromStream; 寫入主要用 SaveToStream.
舉個例子: (建立新工程, 添加兩個 Memo、兩個 Button)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
mStream: TStream; {聲明一個流對象}
procedure TForm1.FormCreate(Sender: TObject);
begin
mStream := TMemoryStream.Create;
{TStream 是抽象類, 只能通過其子類實例化; 這裡我們用了內存流來生成實例}
Memo1.Lines.Text := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
{給 Memo1 個初始值}
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.SaveToStream(mStream); {把 Memo1 中的內容寫入到流}
ShowMessage(IntToStr(mStream.Size)); {26, 當前流的大小}
ShowMessage(IntToStr(mStream.Position)); {26, 當前流的指針}
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
mStream.Position := 4; {調整流的當前指針位置}
Memo2.Lines.LoadFromStream(mStream); {讀出流中的內容到 Memo2}
{
現在 Memo2 中的內容應該是: EFGHIJKLMNOPQRSTUVWXYZ
如果 Position 是 0, Memo2 讀出的內容會是: ABCDEFGHIJKLMNOPQRSTUVWXYZ
如果 Position 等於 Size, 在這裡如果是 26, Memo2 就讀不出什麼了.
}
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
mStream.Free; {流釋放時, 所用內存當然也會同時釋放}
end;
end.