用 TMemoryStream(內存流) 入門

所謂"流", 就是一段數據或是一塊內存;
在進行流操作時, 我們不必關心流中的數據到底是什麼; 只需要知道流的大小

和當前的指針位置. 所以流只有兩個屬性:
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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章