`
free_bird816
  • 浏览: 206069 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Delphi 中流的使用(1) 用 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.
分享到:
评论

相关推荐

    delphi 自定义结构数据通过内存流方式读取与保存到本地 TMemoryStream

    说明: 自定义中的数据类型尽量不要用string如果使用那么在保存数据,与读取数据中增加转换var MyDynamicArray: array of Char;begin SetLength(MyDynamicArray, 48); // 设置数组长度为 48 StrPCopy(MyDynamicArray, ...

    MMTools控件的demo例子,包含从TMemoryStream内存流,资源中播放MP3

    TMemoryStream是Delphi或C++ Builder等RAD Studio开发环境中内置的一种内存流类,它允许程序在内存中存储和操作数据,非常适合处理小到中等大小的二进制数据,如音频文件。 首先,我们要理解TMemoryStream的工作...

    一个内存流播放的例子.zip_delphi一个内存流播放的例子_内存_流播放

    在Delphi中,常见的内存流类型有TMemoryStream和TFastMorphingStream。在这个例子中,我们将主要关注TMemoryStream,因为它是最基础且广泛使用的内存流实现。 播放内存中的视频涉及到多个关键步骤: 1. **读取视频...

    Delphi内存流、文件流原理实例及应用.rar

    1. 创建与初始化:通过`TMemoryStream.Create`方法可以创建一个新的空内存流对象。 2. 数据添加:可以使用`WriteBuffer`方法将任意类型的数据写入内存流。 3. 数据读取:使用`ReadBuffer`方法从内存流中读取数据。 4...

    利用Delphi的TMemoryStream实现文件起始位置添加文件头

    这可以通过OpenFile函数打开文件,然后使用LoadFromStream方法加载到内存流中。 ```delphi MemStream.LoadFromFile('原始文件路径'); ``` 3. **创建文件头并写入**:定义文件头的数据结构,可以是自定义的记录类型...

    delphi流相互转换

    1. **MemoryStream**: Delphi中的`TMemoryStream`是一个内存缓冲区,可以用于读写二进制数据。它非常适合临时存储或传输大量数据,因为它在内存中操作,速度非常快。 2. **TList**: 这是一个动态数组,专门用于存储...

    Delphi内存流读写、删除、输入输出实例,将若干个流合并成一个流,可以对其进行读出添加删除操作以及输出为文件或流.zip

    当涉及到多个内存流的合并时,可以使用TMemoryStream的CopyFrom方法。这个方法接受另一个TMemoryStream对象作为参数,将其内容复制到当前流的末尾,从而实现合并。例如: ```delphi var Stream1, Stream2, ...

    delphi读写取流记录文件TFileStream

    1. 使用TFileStream加载图片数据到内存: ```delphi FileStream := TFileStream.Create('ImagePath.jpg', fmOpenRead or fmShareDenyWrite); try ImageData := TMemoryStream.Create; ImageData.CopyFrom...

    delphi 利用内存流合并文件

    在Delphi编程环境中,利用内存流(Memory Stream)合并文件是一项常见的操作,特别是在处理大量数据或者需要高效读写文件的场景下。内存流允许我们直接在内存中存储和操作数据,而无需频繁地与磁盘交互,从而提高...

    Delphi 流数据的压缩与解压

    例如,你可以创建一个TMemoryStream对象来装载原始数据,然后通过TZOutputStream将这个内存流压缩到另一个TMemoryStream中。 解压过程与压缩类似,只是使用了不同的类,如TZInputStream。在解压时,你首先读取压缩...

    Delphi中文件流的基础使用方法四个实例

    1. **TMemoryStream入门** TMemoryStream是内存流类,它允许在内存中存储和操作数据。它不直接与磁盘文件交互,而是提供一个在内存中读写二进制数据的缓冲区。创建一个TMemoryStream对象后,你可以向其中添加或读取...

    delphi从内存中加载并运行exe

    1. **读取文件到内存**:使用TFileStream或TMemoryStream类来读取exe文件的全部内容,并存储到内存中。这样,我们就有了exe的二进制表示。 2. **解析PE格式**:PE是Windows可执行文件的标准格式,包含了代码、数据...

    Delphi将bmp存取到流中

    TMemoryStream是Delphi中的一个内存流类,它允许我们将数据存储在内存中,而不是直接写入磁盘文件。这个过程不仅高效,而且方便于数据的即时读写。以下将详细讲解如何在Delphi中实现这个功能,并解释相关的技术概念...

    共享内存流TMapStream

    共享内存流TMapStream是一种在Delphi编程环境中用于高效处理大文件读写的机制。它通过映射文件到内存,使得程序可以直接对文件进行高速访问,而无需频繁地进行磁盘I/O操作,从而显著提高性能并减少假死现象。本文将...

    Delphi流文件操作

    Delphi流文件操作 Delphi流文件操作是指在Delphi开发环境中对数据流的各种操作,如写入、读取、合并、分隔等。流是一种抽象的处理数据的工具,定义了一些处理数据的基本操作,如读取数据、写入数据等。程序员只需...

    Delphi_用流来读取TXT文件

    这里,`TMemoryStream.Create`创建了一个新的内存流对象,`LoadFromFile`则将指定路径的文件加载到这个内存流中。 #### 三、读取TXT文件的部分内容 要读取TXT文件的前10个字符,可以使用`ReadBuffer`方法: ```...

    内存流与文件

    在Delphi或C++ Builder等RAD环境中,我们可以使用TMemoryStream类来创建和操作内存流。这个类提供了读写数据的方法,例如Read、Write、Seek等,使得我们可以像操作文件一样操作内存中的数据。 当我们要将图片文件...

    Delphi流加密

    1. **文本文件转流**:首先,我们需要将一个文本文件读取到内存中的流对象。在 Delphi 中,我们可以使用 `TFileStream` 类来创建一个与文本文件关联的流,然后使用 `ReadBuffer` 方法读取文件内容。 2. **流转...

    一个内存流的合并添加删除读出输出的类 (含DEMO)

    总的来说,这个资源提供了一个用于内存流操作的自定义类DEMO,涵盖了内存流的合并、添加、删除和读出输出等功能,适合想要深入理解和使用内存流的Delphi开发者。通过阅读和分析提供的源代码,开发者可以学习到如何...

    delphi 数据流操作

    接收端则反之,接收数据后将其保存到内存流中,再进行解码和处理。 2. **数据库操作**:在数据库操作中,数据流可以用于批量读取或写入数据。例如,使用TFileStream类与ADO(ActiveX Data Objects)或DBX...

Global site tag (gtag.js) - Google Analytics