我想连接两个或多个 gzip 流而不重新压缩它们。
我的意思是我将 A 压缩为 A.gz,将 B 压缩为 B.gz,我想使用 C 或 C++ 将它们压缩为单个 gzip (A+B).gz 而无需再次压缩。
几个注意事项:
- 即使你可以只连接两个文件,而 gunzip 知道如何处理它们,大多数程序也无法处理两个块。
- 我曾经见过一个代码示例,它仅通过解压缩文件然后操作原始文件来执行此操作,这比正常的重新压缩要快得多,但仍然需要 O(n) CPU 操作。
- 不幸的是,我找不到我曾经找到过的这个例子(仅使用解压缩进行连接),如果有人能指出它,我会很高兴。
注意:它不是重复的,因为建议的解决方案不适合我的需要。
清除编辑:
我想根据请求连接几个压缩的 HTML pices 并将它们作为一页发送到浏览器:“Accept-Encoding:gzip”,响应为“Content-Encoding:gzip”
如果将流连接为简单的cat a.gz b.gz >ab.gz
,Gecko (firefox) 和 KHTML Web 引擎只得到第一部分 (a);IE6 不显示任何内容,Google Chrome 将第一部分 (a) 正确显示,第二部分 (b) 显示为垃圾(根本不解压缩)。
只有 Opera 能很好地处理这个问题。
因此,我需要创建一个包含多个块的 gzip 流并在不重新压缩的情况下发送它们。
更新:我在 zlib 的示例中找到了gzjoin.c,它只使用解压缩。问题是解压还是比较慢,简单memcpy
。
它仍然比最快的 gzip 压缩快 4 倍。但这还不够。
我需要的是找到我需要与 gzip 文件一起保存的数据,以便不运行解压缩程序,以及如何在压缩过程中找到这些数据。