加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:39:36 所属栏目:百科 来源:网络整理
导读:我想连接两个或更多的gzip流,而不需要重新压缩它们. 我的意思是我有A压缩为A.gz和B到B.gz,我想压缩它们到单个gzip(A B).gz,而不用压缩再次使用C或C. 几个注释: 即使你可以连接两个文件,gunzip会知道如何处理它们,大多数程序将无法处理两个块. 我曾经看过一
我想连接两个或更多的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文件一起保存的数据
不运行解压缩程序,如何在压缩期间找到这些数据.

解决方法

看看 RFC1951和 RFC1952

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读