重建zlib的流(Reconstructing zlib stream)

2019-09-30 10:03发布

我的项目包含发送器/接收框架,只能说说单向的,不存在从接收到发送者的返回通道。 数据的发送者压缩部分它使用zlib的发送到接收器。

我想我的接收机弹性死机/重启/重启,是否有可能加入从某种程度上随机点zlib的流?

两个发送器/接收器使用Z_SYNC_FLUSH。

有些想法我有:

  1. 节能状态结构到磁盘和接收器重新启动后重新载入。
  2. 更换Z_SYNC_FLUSH到Z_FULL_FLUSH。

我想保存的zlib压缩数据的第一块,重启接收器,比重新发送第一个块,之后继续从随机块流和它似乎工作 - 我不明白为什么,它是一个固体溶液或这只是一个运气?

更换到Z_FULL_FLUSH似乎没有任何区别。

有另一种方式来解决此问题? 你觉得我错过了什么?

非常感谢,
贾森

Answer 1:

为了保证您可以在某些时候,没有历史开始减压,你必须使用Z_FULL_FLUSH或者干脆终止流,并开始一个新的。

对于前者,你可以做一个Z_SYNC_FLUSH后跟一个Z_FULL_FLUSH以插入导致9个字节两个标记00 00 ff ff 00 00 00 ff ff ,这将是不太可能在压缩数据随机观察。 您可以为后者做的一样,只需将以前的zlib流的结束和下一个ZLIB流的开始之间的足够大的标记。



文章来源: Reconstructing zlib stream