关于 Delphi 中流的使用(1) 用 TMemoryStream(内存流) 入门

摘要:
所谓的“流”是一段数据或一段内存;在执行流操作时,我们不需要关心流中的数据是什么;您只需要知道流的大小和当前指针的位置。因此,流只有两个属性:大小和位置。流的操作只是读和写。因此,流的主要方法是读和写。在许多控件的使用中,LoadFromStream主要用于读取;例如:(创建一个新项目,添加两个备忘录和两个总线
前言:

所谓"流", 就是一段数据或是一块内存;
在进行流操作时, 我们不必关心流中的数据到底是什么; 只需要知道流的大小和当前的指针位置. 所以流只有两个属性:
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.


免责声明:文章转载自《关于 Delphi 中流的使用(1) 用 TMemoryStream(内存流) 入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇设计模式14---设计模式之命令模式(Command)(行为型)Python之登录接口下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c++对象的序列化与反序列化的解决方案----flatbuffers的使用

概述 本篇blog主要是给大家介绍FlatBuffers的相关的信息和用法,当我在了解的FlatBuffers时,国内还没有一些相关的文章去介绍FlatBuffers,不得不FQ去google相关的用法,然后理解并应用到自己的代码中,学习的时间成本很高。所以就花了点时间整理一份具体的用法,提供给大家一个参考。 简介 一、什么是FlatBuffers? Fl...

Gears Android WIFI/基站定位源代码分析

Gears Android WIFI/基站定位源代码分析转载时请注明出处和作者联系方式文章出处:http://www.limodev.cn/blog作者联系方式:李先静 <xianjimli at hotmail dot com>Broncho A1还不支持基站和WIFI定位,Android的老版本里是有NetworkLocationProvi...

js开启和关闭页面滚动【亲测有效】

在移动端的页面开发过程中,经常会遇到点击弹框禁止页面滚动的情景,下面就来说下具体的做法。。。 第一步:构建一个函数 function bodyScroll(event){ event.preventDefault(); } 第二步:点击禁止页面滚动 $(".button").click(function(){ document.body....

Delphi中Indy 10的安装和老版本的卸载

安装中遇到的问题: 1,用新的indy替换掉了老版本source下面的indy 2,按照参考资料编译的.dpk版本要保持跟老版本一致,如本人的就是XXX100.dpk 3,编译和安装路径统一放在了delphi安装目录的bin下面 4,在tool的library path中要加入    XXXDelphi 7SourceCore XXX Delphi 7So...

Tom猫小游戏功能实现

  本文章通过简单的css和html的操作,来实现Tom猫小游戏的功能,通过简单的js代码,让图片不断切换来实现动画效果。 Tom猫小游戏的HTML部分:    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <...

Delphi 使窗体Showmodal后可以操作其他窗体

对话框ShowModal之后不能操作其它窗口,实际上是因为Windows Disable了其它窗口。所以当你需要在模态对话框中访问其它已经可见的窗口时,需要用EnableWindow API来激活对应的窗口。 例如: form2.showmodal; 在form2的OnShow事件中: enablewindow(form1.handle,true)...