Art*_*yom 13 c++ gzip concatenation
我想连接两个或更多gzip流而不重新压缩它们.
我的意思是我将A压缩为A.gz,B压缩为B.gz,我想将它们压缩为单个gzip(A + B).gz而不再使用C或C++进行压缩.
几点说明:
注意:它与此不重复,因为建议的解决方案不符合我的需要.
清除编辑:
我想连接几个压缩的HTML pices,并根据请求将它们作为一个页面发送到浏览器:"Accept-Encoding:gzip",带有respnse"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文件一起保存的数据,以便不运行解压缩过程,以及如何在压缩过程中找到这些数据.
gzip手册说,可以在尝试时连接两个gzip文件.
http://www.gnu.org/software/gzip/manual/gzip.html#Advanced-usage
所以似乎其他工具可能会被打破.如此错误报告中所示. http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=97263
除了向每个浏览器制造商提交错误报告,并希望它们符合要求之外,也许您的程序可以缓存所需数据的最常见连接.
正如其他人所说,您可以进行手术:http: //www.gzip.org/zlib/rfc-gzip.html
这需要最终未压缩文件的CRC-32.通过添加各个子文件的长度,可以轻松计算未压缩文件的所需大小.
在最后一个链接的底部,有一些代码用于计算名为update_crc的运行crc-32.
每次运行进程时计算未压缩文件的crc,可能比gzip算法本身便宜.