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

时间:2014-01-03 19:55:51

标签: compression gzip

我想预先计算一些结构(hash / dictionary / tree - depends on the terminology),并在压缩/解压缩数据时将其与gzip一起使用。

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

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

我的目标是节省CPU时间,计算出不同服务器响应的计算机多次,但更重要的是 - 当我可以使用静态结构时,通过网络保存字节。

另一个选择是使用除gzip以外的其他压缩算法,但我宁愿不这样做。

谢谢!

1 个答案:

答案 0 :(得分:4)

要“通过网络保存字节数”,您应该使用zlibdeflateSetDictionary()inflateSetDictionary()操作。它们允许您提供最多32K的数据,类似于压缩的数据,称为“字典”。解压缩端需要完全相同的字典。字典没有什么特别之处。它可以简单地构建为多个KB响应的串联,并且适合32K。

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

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