Delphi 各种TStream(流)介绍


本文整理自网络,侵删。

 
有时我看到几分钟的人说,Delphi移动应用程序中列出的数据只是作为字符串数据传输,并且速度很慢。
 
因此,我总结了经常用于在Delphi中读取和写入数据的Stream类。
 
TStream是一种流对象的基类,它可以读写各种类型的存储介质,例如磁盘文件,动态内存等。
特殊流对象可用于读取,写入和复制存储在特定媒体上的信息。TStream的每个子类都实现了从特定存储介质(例如磁盘文件和动态内存)传输信息的方法。除了读取,写入和复制流的方法外,流对象还允许应用程序在流中找到任意位置。TStream的属性提供有关流的信息,例如其大小和当前位置。
全局功能ReadComponentRes和WriteComponentRes自动创建子流对象,例如用于组件流传输的内存和文件流。如果要流式传输各种信息,请根据您的特定数据和存储需求选择一个子类。。如果要流式传输各种信息,请根据您的特定数据和存储需求选择一个子类。
 
TFileStream- 处理文件。
TStringStream-处理内存中的字符串。
TMemoryStream-使用内存缓冲区。
TWinSocketStream-通过套接字连接读取和写入。
TOleStream-使用COM接口进行读写。
 
 
TFileStream
TFileStream允许应用程序读取和写入磁盘上的文件。
使用TFileStream访问有关磁盘文件的信息。TFileStream提供了打开,读取和读取命名文件的方法。如果您的应用程序已经具有该文件的句柄并以该模式打开,请改用THandleStream。
TBufferedFileStream已添加到柏林RAD Studio 10.1中,它允许使用缓冲的文件流进行更快的文件I / O操作。
http://tech.devgear.co.kr/index.php?mid=delphi_news&search_keyword=stream&search_target=title_content&document_srl=422069
 
 
TStringStream
TStringStream提供对存储为长字符串的信息的类似文件的访问。
我使用TStringStream将数据存储为使用I / O函数扩展的长字符串。TStringStream可用作中间对象,可以保存文本以及在其他存储媒体上读取或存储文本。TStringStream提供了一种机制,用于处理难以访问的媒体中的文本。
 
 
TMemoryStream
TMemoryStream是将数据存储在动态内存中的流。
使用TMemoryStream将数据存储在具有类似文件的访问功能的增强的动态内存缓冲区中。TMemoryStream引入了用于管理动态内存缓冲区的方法和属性,同时提供了流对象的常规I / O功能。
内存流可用作可以保存信息以及从其他存储介质读取或存储信息的中间对象。它提供了一种有用的格式,用于比较流的内容或处理存储在难以访问的媒体上的数据。
 
以下是使用TMemoryStream的示例。
http://tech.devgear.co.kr/index.php?mid=delphi_news&search_keyword=stream&search_target=title_content&document_srl=424296
 
 
TWinSocketStream
TWinSocketStream是一个流,为应用程序提供服务以读取和写入套接字连接。
使用TWinSocketStream通过阻塞套接字连接读取或写入信息。Windows套接字对象包含用于读取或写入套接字连接的方法。但是,这些方法没有提供一种机制,可以在断开套接字连接或等待套接字连接准备好进行读取时超时。
如果套接字是非阻塞套接字,则不缺少超时或等待机制,因为读写响应于套接字连接的通知而异步发生。但是,在阻塞套接字的情况下,我们需要TWinSocketStream提供的这些机制来确保不会无限期地停止使用套接字的应用程序。
要使用Windows套接字流,请创建TWinSocketStream的实例,并使用该流的方法读取或写入数据并清空Windows套接字流。
注意:TWinSocketStream在非阻塞套接字上不起作用。
 
TOleStream
TOleStream通过OLE对象提供的流接口读取和写入信息。
使用TOleStream为OLE流接口创建TStream包装器。TOleStream使用OLE流的流接口读取和写入信息。TActiveXControl对象或者使用TOleStream从流中加载自身,或者将自身保存到流中。
本示例说明如何使用内置的组件流支持将组件转换为字符串并将字符串转换回组件。
type
     TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
    private
        { Private declarations }
    public
    { Public declarations }
    end;
    TMyScrollBar = class(TScrollBar)
    end;
 
  var
    Form1: TForm1;
    ScrollBar1: TMyScrollBar;
 
  implementation
 
  {$R *.dfm}
 
  function ComponentToStringProc(Component: TComponent): string;
  var
    BinStream:TMemoryStream;
    StrStream: TStringStream;
    s: string;
  begin
    BinStream := TMemoryStream.Create;
    try
      StrStream := TStringStream.Create(s);
      try
        BinStream.WriteComponent(Component);
        BinStream.Seek(0, soFromBeginning);
        ObjectBinaryToText(BinStream, StrStream);
        StrStream.Seek(0, soFromBeginning);
        Result:= StrStream.DataString;
      finally
        StrStream.Free;
      end;
    finally
      BinStream.Free
    end;
  end;
 
  function StringToComponentProc(Value: string): TComponent;
  var
    StrStream:TStringStream;
    BinStream: TMemoryStream;
  begin
    StrStream := TStringStream.Create(Value);
    try
      BinStream := TMemoryStream.Create;
      try
        ObjectTextToBinary(StrStream, BinStream);
        BinStream.Seek(0, soFromBeginning);
        Result:= BinStream.ReadComponent(nil);
      finally
        BinStream.Free;
      end;
    finally
      StrStream.Free;
    end;
  end;
 
  procedure TForm1.Button1Click(Sender: TObject);
  begin
    Memo1.Text:= ComponentToStringProc(ScrollBar1);
  end;
 
// Edit the scrollbar parameters in the memo, click this
// button and see the scrollbar change.
  procedure TForm1.Button2Click(Sender: TObject);
  begin
    ScrollBar1.Free;
    ScrollBar1:= (StringToComponentProc(Memo1.Text) as TMyScrollBar);
    ScrollBar1.Parent:= Form1;
    ScrollBar1.Visible:= TRUE;
end;
 
  procedure TForm1.FormCreate(Sender: TObject);
  begin
    ScrollBar1:= TMyScrollBar.Create(Form1);
    ScrollBar1.Parent:= Form1;
    ScrollBar1.Visible:= TRUE;
    ScrollBar1.Top:= 48;
    ScrollBar1.Left:= 250;
    ScrollBar1.Name:= 'Ricksbar';
  end;
 
  procedure TForm1.FormDestroy(Sender: TObject);
  begin
    ScrollBar1.Free;
  end;
 
  initialization
 
  RegisterClass(MyScrollBar);

相关阅读 >>

Delphi清除ie临时文件,历史记录

delphDelphi chromium embedded 清除指定链接浏览器缓存、cookies

Delphi stringgrid 实例5 本例功能:字体修改为居中,红色,20号

Delphi 图像灰度化处理

Delphi 2009 之 tstringbuilder 类[6]: equals

Delphi 截取两个字符之间的内容

Delphi 无dll版下载者

Delphi webbrowser获取iframe页面内容

Delphi 比较版本号

Delphi uac相关代码

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...