我想连接两个或更多gzip流而不重新压缩它们。如何连接两个或更多gzip文件/流
我的意思是我有一个压缩到A.gz和B到B.gz,我想压缩他们到单个gzip(A + B).gz没有再次压缩,使用C或C++。
几个注意事项:
- 即使你可以CONCAT两个文件和gunzip解会知道如何对付他们,大部分的程序将无法处理两个块。
- 我曾经看到过一个代码示例,它只是通过解压缩文件,然后操作原始文件,这比正常的重新压缩快得多,但仍然需要O(n)CPU操作。
- 不幸的是,我找不到这个例子,我曾经发现过一次(只使用解压缩连接),如果有人能指出它,我会很大。
注意:它不是this的重复,因为提出的解决方案不符合我的需要。
Clearification编辑:
我想concate几个压缩HTML PICES并将它们发送到浏览器作为一个页面,按照要求:“接受编码:gzip”,与respnse“内容编码: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文件一起保存的数据,以便 不运行解压过程,以及如何在压缩过程中找到这些数据。
你真的想要压缩它们吗,还是将它们连接到同一个文件? – 2009-07-17 13:38:43
我想创建一个gzip压缩文件/流/内存块的两个其他gzip压缩文件/流/内存块没有解压缩他们,连接他们,并再次压缩他们。 – Artyom 2009-07-17 14:32:36
请参阅编辑中的清除。 – Artyom 2009-07-24 08:15:16