gpt4 book ai didi

delphi - 在将组件写入流中时压缩组件

转载 作者:行者123 更新时间:2023-12-03 15:05:05 24 4
gpt4 key购买 nike

我们使用的某些应用程序依赖于 TComponent 后代,在 Write/ReadComponentResFile 的帮助下轻松保存/加载其内部对象的状态

function TSomeClass.SaveState: boolean;
begin
...
try
...
WriteComponentResFile(self.f_path, TComponent(self));
result := true;
except
result := false;
end;
....
end;

现在我们想压缩这些数据,但由于某种原因,我一直无法找到使用 JCL bzip2 流类编写类似函数的方法,不支持查找操作

由于我不是 TStream 专家,我想知道实现这种压缩的最简单方法;使用 TComponent 读/写?

谢谢

最佳答案

TComponent 显然希望能够在它读取或写入的流中进行查找,而您通常无法使用压缩流来做到这一点 - 至少不能向后。一旦读取了一个字节,您就无法返回并再次读取它,因为您获得的值可能取决于首先导致该字节的整个流内容。向后查找以重新读取一个字节可能意味着重新读取整个流。对于写入来说,要返回并“修复”流的某些区域,更改一个字节将意味着需要重新压缩其后的所有内容。所以你可以明白为什么压缩流不喜欢向后查找。

将数据写入TMemoryStream,然后将该流的内容复制到压缩流。要读取,请将解压缩流复制到 TMemoryStream 中,然后从那里加载组件。 (从内存流中加载组件之前,不要忘记将 Position 属性设置回零。)

关于delphi - 在将组件写入流中时压缩组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/895314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com