我想将两个或多个gzip流连接起来,而不需要重新压缩它们。
我的意思是,我将A压缩为A.gz,将B压缩为B.gz,我想使用C或C++将它们压缩为单个gzip (A+B).gz,而不需要再次压缩。
几点说明:
- 即使你只是连接两个文件,gunzip也可以处理它们,但大多数程序可能无法处理两个块。
- 我曾经看过一种代码示例,它只通过解压缩文件并操作原始文件就能实现此功能,这比普通的重新压缩快得多,但仍需要O(n)的CPU操作。
- 不幸的是,我找不到我曾经找到的这个例子(仅使用解压缩进行连接),如果有人能指出来,我将不胜感激。
注意:这不是此问题的重复,因为提出的解决方案不符合我的需求。
澄清编辑:
我希望将几个压缩的 HTML 片段连接在一起,并将它们作为一个页面发送到浏览器,根据请求:"Accept-Encoding: gzip",响应为:"Content-Encoding: gzip"
如果流像cat a.gz b.gz >ab.gz
那样简单地连接,Gecko (firefox) 和 KHTML 网页引擎只会得到第一部分(a);IE6 不显示任何内容,而 Google Chrome 正确显示第一部分(a),第二部分(b)则显示垃圾字符(根本没有解压缩)。
只有 Opera 能够很好地处理这个问题。
因此,我需要创建一个由多个块组成的单个gzip流,并在不重新压缩的情况下发送它们。
更新:我在zlib的示例中找到了gzjoin.c,它只使用解压缩来实现。问题是解压缩仍然比简单的memcpy
慢。
它仍然比最快的gzip压缩快4倍。但这还不够。
我需要找到需要与gzip文件一起保存的数据,以便不运行解压缩过程,并且如何在压缩期间找到此数据。