前面一章我们知道了什么流,而在今天这章里我们就来看看“流”的基本概念及函数声明

在我们的Delphi 中,所有的流对象可以的基类为 Tstream 类,其中定义了所有流的共同属性和方法具的的方法和属性如下:

TStream 类中定义的属性如下:

1.Size: 这个属性以字节的形式返回流中的数据大小;

2.Position:这个属性可是控制流中存取指针的位置;

这里我们引用万一里的一例子:

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)); //这里我们可以用这个Size属性来查看这个流的具体大小是多少 这里的大小是26!!!因为是二十六个字母!!!

ShowMessage(IntToStr(mStream.Position)); {26, 当前流的指针}
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
mStream.Position := 4; {调整流的当前指针位置} //这里我们用到了Position这个属性来控制从流的哪个位置来装载数据;
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.

Tstream 中定义了四个虚拟方法:

1.Read:这个方法的作用是将流中的数据读取出来。它的原型为:

Function Read(Var Buffer; Count:Longint):Longint;virtual;abstract;
//参数1:Buffer 这个是存放数据的缓冲区。
//参数2:Count 这个是需要读出来的数据的字节数
//*注意:这个方法的返回值为实际读出的字节数,字可以小于或是等于Count中指定的值;
 

2.Write:这个方法和上面的那个是相反的,这个是将数据写入流中,它的原型为:

Function Write(Var Buffer; Count:Longint):Longint;virtual;abstract;
//参数1:Buffer 这个是为将要写入流中的数据的缓冲区。
//参数2:Count 为数据升序的字节数
//*注意:这个方法的返回值为实际写入的字节数,字可以小于或是等于Count中指定的值;
 

3.Seek:这个方法可以很方便的实现流中读取指针的移动,函数的原型:

Function Seek(Offset:Longint; Origint:Word):Longint;virtual;abstract;
//参数1:为偏移字节数,他的参数Origint指出Offset的实际意义,其可能的取值下面三个
         (1)soFromBeginning:Offset 为移动后指针距离开始位置。此时的Offset必须大于或等于0;
         (2)soFromCurrent: Offset 为移动指针与当前指针的相对位置;
         (3)soFromEnd: Offset 为移动后指针距离数据结束的位置。此时的Offset必须小于或等于0.该方法返回值为移动后指针的位置;
//参数2:Count 这个是需要读出来的数据的字节数
 

今天先写这么多,有时间再写!

 

posted on 2012-01-26 23:47  BarneyX  阅读(255)  评论(0编辑  收藏  举报