最近做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字节(注意大小端),然后分配对应大小的内存即可。
国内网站上的主要问题:
<