zlib gzip http gizp 压缩,解压缩 isize 内存分配

在处理HTTP服务端通过GZIP压缩的内容时,需要对其进行解压缩。文章探讨了解压缩过程中如何确定解压后文件的最大大小,通过分析gzip的RFC 1952,发现isize字段指示了未压缩的输入文件大小,可用于预先分配内存。此外,指出国内一些资源对zlib.inflateInit2参数的理解误区,强调在HTTP gzip场景中,使用15+16而非15+32更为合适。
摘要由CSDN通过智能技术生成

最近做http的项目时遇到了关于gzip解压的问题。

说下问题:

http服务端通过gzip方式压缩的内容,需要对其进行解压。


问题来了:

压缩后的内容B解压后为A,解压后的大小A最大可以达到5MB,但是一般来说只有几百KB。


解压:

查看了 http://zlib.net/ 的各种文章。也在网络上搜索了一遍。

大致的方法如下:


但是都没有一个提前计算出压缩后文件大小的方法。再看 zlib.net上面的文章,压缩文件有defaltebound函数可以提前计算大小。

但是解压却没有类似的inflatebound。


好吧不臭屁了。直接来。


如何获取gzip解压后的大小:

怀着最后一试的心态,查看了gzip的RFC rfc1952(有兴趣的自己去找)


文章说了gzip的格式结构: isize最后4字节是uncompressed input size未压缩的输入文件大小。

用在beyond compare中查看我上午压缩好的gzip文件,解压后大小为XXXByte, 换算成16进制为0xXXXByte。

在beyond compare中的最后我找到了0xXXXbyte的字样。

这样就可以提前获取gzip压缩后的大小:取后4字节(注意大小端),然后分配对应大小的内存即可。


国内网站上的主要问题:

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值