加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 在TStream中编写TComponents时压缩它们

发布时间:2020-12-15 09:48:44 所属栏目:大数据 来源:网络整理
导读:在Write / ReadComponentResFile的帮助下,我们使用的一些应用程序依赖于TComponent后代来轻松保存/加载其内部对象的状态 function TSomeClass.SaveState: boolean;begin ... try ... WriteComponentResFile(self.f_path,TComponent(self)); result := true;
在Write / ReadComponentResFile的帮助下,我们使用的一些应用程序依赖于TComponent后代来轻松保存/加载其内部对象的状态

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属性设置回零.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读