delphi - 将多个 TObject 流式传输到 TMemoryStream

标签 delphi delphi-7

我需要将多个对象(其中大多数是TObject/非持久性)存储到TMemoryStream,将流保存到磁盘并将其加载回来。这些对象需要一个接一个地进行流式传输。某种通用容器。

目前,我将对象的所有属性/字段/变量放入记录中,并将记录保存到流中。但我打算使用函数文件 WriteIntergerWriteString (见下文)、WriteBoolean 等函数来保存/加载流中的数据。

StreamReadString(CONST MemStream: TMemoryStream): string; 
StreamWriteString(CONST MemStream: TMemoryStream; s: string);

不过,看来我需要重写很多代码。 TStringList.LoadFromStream 是众多示例之一,它无法正常工作,因此需要重写。这是因为 TStringList 需要是流中的最后一个对象(它从当前位置读取到流的末尾)。

有人知道提供这样基本功能的库吗?


我使用的是 Delphi 7,所以 RTTI 不是很好。

最佳答案

查看相关帖子here

顺便说一句,Delphi7也有RTTI支持,否则你的表单(.dfm)无法加载:-)
如果您使用已发布的属性,RTTI 将“开箱即用”地为您工作。
否则你必须自己做

过程 DefineProperties(Filer: TFiler);覆盖;

您可以看看它是如何实现的:

procedure TDataModule.DefineProperties(Filer: TFiler);

这些是对象序列化的唯一方法。
但您也可以尝试记录:如果您不使用数组(字符串也是字符数组)或对象属性,您可以直接将记录保存并加载到内存(流、文件等)。我在我的 AsmProfiler 中使用它能够非常快速地读取和写入许多(小)结果(可以通过一次 Move/CopyMemory 调用保存和加载具有某些整数值的记录数组!)。

关于delphi - 将多个 TObject 流式传输到 TMemoryStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2904275/

相关文章:

delphi - 有什么方法可以在 Delphi 7 中折叠代码?

delphi - 如何将字符串作为过程执行

delphi - 将 5 个 ListBox 同步在一起

delphi - 识别运行 Delphi 7 程序的服务器

delphi - 通过集合/列表/其他容器使用 AWE Memory 进行数据存储

delphi - 如何在主窗体之前显示用于设置配置的窗体?

delphi - 如何在我的 Delphi 应用程序中使用嵌入式 Firebird

delphi - 修改系列点时是否可以仅重新绘制 TeeChart 的一个区域?

delphi - 我是否应该转向 Indy 9?

delphi - 在 Delphi 7 项目中重建架构的第一步