前言:
所谓"流", 就是一段数据或是一块内存;
在进行流操作时, 我们不必关心流中的数据到底是什么; 只需要知道流的大小和当前的指针位置. 所以流只有两个属性:
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.
分享到:
相关推荐
说明: 自定义中的数据类型尽量不要用string如果使用那么在保存数据,与读取数据中增加转换var MyDynamicArray: array of Char;begin SetLength(MyDynamicArray, 48); // 设置数组长度为 48 StrPCopy(MyDynamicArray, ...
TMemoryStream是Delphi或C++ Builder等RAD Studio开发环境中内置的一种内存流类,它允许程序在内存中存储和操作数据,非常适合处理小到中等大小的二进制数据,如音频文件。 首先,我们要理解TMemoryStream的工作...
在Delphi中,常见的内存流类型有TMemoryStream和TFastMorphingStream。在这个例子中,我们将主要关注TMemoryStream,因为它是最基础且广泛使用的内存流实现。 播放内存中的视频涉及到多个关键步骤: 1. **读取视频...
1. 创建与初始化:通过`TMemoryStream.Create`方法可以创建一个新的空内存流对象。 2. 数据添加:可以使用`WriteBuffer`方法将任意类型的数据写入内存流。 3. 数据读取:使用`ReadBuffer`方法从内存流中读取数据。 4...
这可以通过OpenFile函数打开文件,然后使用LoadFromStream方法加载到内存流中。 ```delphi MemStream.LoadFromFile('原始文件路径'); ``` 3. **创建文件头并写入**:定义文件头的数据结构,可以是自定义的记录类型...
1. **MemoryStream**: Delphi中的`TMemoryStream`是一个内存缓冲区,可以用于读写二进制数据。它非常适合临时存储或传输大量数据,因为它在内存中操作,速度非常快。 2. **TList**: 这是一个动态数组,专门用于存储...
当涉及到多个内存流的合并时,可以使用TMemoryStream的CopyFrom方法。这个方法接受另一个TMemoryStream对象作为参数,将其内容复制到当前流的末尾,从而实现合并。例如: ```delphi var Stream1, Stream2, ...
1. 使用TFileStream加载图片数据到内存: ```delphi FileStream := TFileStream.Create('ImagePath.jpg', fmOpenRead or fmShareDenyWrite); try ImageData := TMemoryStream.Create; ImageData.CopyFrom...
在Delphi编程环境中,利用内存流(Memory Stream)合并文件是一项常见的操作,特别是在处理大量数据或者需要高效读写文件的场景下。内存流允许我们直接在内存中存储和操作数据,而无需频繁地与磁盘交互,从而提高...
例如,你可以创建一个TMemoryStream对象来装载原始数据,然后通过TZOutputStream将这个内存流压缩到另一个TMemoryStream中。 解压过程与压缩类似,只是使用了不同的类,如TZInputStream。在解压时,你首先读取压缩...
1. **TMemoryStream入门** TMemoryStream是内存流类,它允许在内存中存储和操作数据。它不直接与磁盘文件交互,而是提供一个在内存中读写二进制数据的缓冲区。创建一个TMemoryStream对象后,你可以向其中添加或读取...
1. **读取文件到内存**:使用TFileStream或TMemoryStream类来读取exe文件的全部内容,并存储到内存中。这样,我们就有了exe的二进制表示。 2. **解析PE格式**:PE是Windows可执行文件的标准格式,包含了代码、数据...
TMemoryStream是Delphi中的一个内存流类,它允许我们将数据存储在内存中,而不是直接写入磁盘文件。这个过程不仅高效,而且方便于数据的即时读写。以下将详细讲解如何在Delphi中实现这个功能,并解释相关的技术概念...
共享内存流TMapStream是一种在Delphi编程环境中用于高效处理大文件读写的机制。它通过映射文件到内存,使得程序可以直接对文件进行高速访问,而无需频繁地进行磁盘I/O操作,从而显著提高性能并减少假死现象。本文将...
Delphi流文件操作 Delphi流文件操作是指在Delphi开发环境中对数据流的各种操作,如写入、读取、合并、分隔等。流是一种抽象的处理数据的工具,定义了一些处理数据的基本操作,如读取数据、写入数据等。程序员只需...
这里,`TMemoryStream.Create`创建了一个新的内存流对象,`LoadFromFile`则将指定路径的文件加载到这个内存流中。 #### 三、读取TXT文件的部分内容 要读取TXT文件的前10个字符,可以使用`ReadBuffer`方法: ```...
在Delphi或C++ Builder等RAD环境中,我们可以使用TMemoryStream类来创建和操作内存流。这个类提供了读写数据的方法,例如Read、Write、Seek等,使得我们可以像操作文件一样操作内存中的数据。 当我们要将图片文件...
1. **文本文件转流**:首先,我们需要将一个文本文件读取到内存中的流对象。在 Delphi 中,我们可以使用 `TFileStream` 类来创建一个与文本文件关联的流,然后使用 `ReadBuffer` 方法读取文件内容。 2. **流转...
总的来说,这个资源提供了一个用于内存流操作的自定义类DEMO,涵盖了内存流的合并、添加、删除和读出输出等功能,适合想要深入理解和使用内存流的Delphi开发者。通过阅读和分析提供的源代码,开发者可以学习到如何...
接收端则反之,接收数据后将其保存到内存流中,再进行解码和处理。 2. **数据库操作**:在数据库操作中,数据流可以用于批量读取或写入数据。例如,使用TFileStream类与ADO(ActiveX Data Objects)或DBX...