我需要将多个对象(其中大多数是TObject
/非持久性)存储到TMemoryStream
,将流保存到磁盘并将其加载回来。这些对象需要一个接一个地进行流式传输。某种通用容器。
目前,我将对象的所有属性/字段/变量放入记录中,并将记录保存到流中。但我打算使用函数文件 WriteInterger
、WriteString
(见下文)、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/