Compression 使用gzip时使用预先计算的数据

Compression 使用gzip时使用预先计算的数据,compression,gzip,Compression,Gzip,我想预先计算一些结构(哈希/字典/树-取决于术语),并在压缩/解压缩数据时将其与gzip一起使用 动机是在以下场景中通过线路保存数据: 我有许多服务器发送给客户端的相对较小(几KB)的文本响应。这些反应的结构非常相似,但并不完全相同。我可以在客户端和服务器中放置静态结构(它们不必相同) 我们的目标是节省CPU时间,为不同的服务器响应多次计算计算机上的数据,但更重要的是,当我可以使用静态结构时,可以通过线路节省字节 另一种选择是使用不同于gzip的压缩算法,但我不想这样做 谢谢 要“在线保存字节”

我想预先计算一些结构
(哈希/字典/树-取决于术语)
,并在压缩/解压缩数据时将其与
gzip
一起使用

动机是在以下场景中通过线路保存数据:

我有许多服务器发送给客户端的相对较小(几KB)的文本响应。这些反应的结构非常相似,但并不完全相同。我可以在客户端和服务器中放置静态结构(它们不必相同)

我们的目标是节省CPU时间,为不同的服务器响应多次计算计算机上的数据,但更重要的是,当我可以使用静态结构时,可以通过线路节省字节

另一种选择是使用不同于
gzip
的压缩算法,但我不想这样做

谢谢

要“在线保存字节”,应使用的
deflateSetDictionary()
inflateSetDictionary()
操作。它们允许您提供高达32K的数据,类似于正在压缩的数据,称为“字典”。解压端需要提供完全相同的字典。这本词典没有什么特别之处。它可以简单地构造为32K中所能容纳的多个KB响应的串联

这将使用zlib格式而不是gzip格式,因为gzip格式没有使用预设词典的规定


CPU时间不会增加,事实上,处理32K字典会花费更多的CPU时间。但在您描述的情况下,它可以显著提高压缩效果。您可以通过处理32K字典一次,然后使用
deflateCopy()
复制deflate状态以供重用来减少CPU时间。

您可以预计算哈夫曼树,并通过gzip提取哈夫曼编码的数据。但我不知道你从最后一步中得到了多少好处(事实上,我曾经为《哈姆雷特》的剧本这样做过一次,哈夫曼编码比gzip快了9%,但gzip对哈夫曼编码的版本几乎没有额外的压缩,只有0.7%;bzip2两个都比得上)。理论上,gzip可以使用预计算的数据(在dataformat中是允许的),但是我找不到一个有这个选项的实现。