c – 如何连接两个或更多gzip文件/流

前端之家收集整理的这篇文章主要介绍了c – 如何连接两个或更多gzip文件/流前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想连接两个或更多的gzip流,而不需要重新压缩它们.

我的意思是我有A压缩为A.gz和B到B.gz,我想压缩它们到单个gzip(A B).gz,而不用压缩再次使用C或C.

几个注释:

>即使你可以连接两个文件,gunzip会知道如何处理它们,大多数程序将无法处理两个块.
>我曾经看过一个代码示例,只是通过解压文件,然后操作原始文件,这显着快于正常的重新压缩,但仍然需要O(n)cpu操作.
>不幸的是,我找不到这个我曾经发现过的这个例子(仅使用解压缩来连接),如果有人可以指出我会很棒.

注意:它不是this的重复,因为提出的解决方案不符合我的需要.

清除编辑:

我想要将几个压缩的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)显示垃圾(根本不解压缩).

只有歌剧处理好这个.

所以我需要创建一个单个gzip流的几个块,并发送它们而不需要重新压缩.

更新:我在zlib的例子中找到了gzjoin.c,它只使用解压缩.问题是解压缩速度还是比较简单的memcpy.

它仍然是更快的4倍,然后最快的gzip压缩.但这还不够.

我需要的是找到我需要与gzip文件一起保存的数据
不运行解压缩程序,如何在压缩期间找到这些数据.

解决方法

看看 RFC1951RFC1952

格式只是一个成员的套件,每个由三个部分组成,一个标题,数据和一个预告片.数据部分本身是一组块,每个块具有标题和数据部分.

为了模拟两个(或多个文件)连接的结果的效果,您只需要调整标题(实际上有一个最后一个块标志)和预告片并复制数据部分.

有一个问题,预告片有一个CRC32的未压缩数据,我不知道这个是否容易计算,当你知道零件的CRC.

编辑:您发现的gzjoin.c文件中的注释意味着,虽然可以在不解压缩数据的情况下计算CRC32,但还有其他需要解压缩的东西.

猜你在找的C&C++相关文章