zlib gzip http gizp 压缩,解压缩 isize 内存分配
来源:互联网 发布:梦幻西游mac无法更新 编辑:程序博客网 时间:2024/05/21 10:58
最近做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字节(注意大小端),然后分配对应大小的内存即可。
国内网站上的主要问题:
大多数人都没有去看zlib.net官网上的英文原文。
看了的不够深入,好几篇博客说解压gzip时inflateInit2的参数只能够为47即15+32, 但是zlib的原话是:
Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection, or add 16 to decode only thegzip format (the zlib format will return a Z_DATA_ERROR).
意思是15+32自动检测zlib和gzip 15+16则只解压gzip,对于只解压gzip的http gzip场景来说31更加合适。
- zlib gzip http gizp 压缩,解压缩 isize 内存分配
- web服务交互中HTTP数据内容GZIP,ZLIB格式压缩与解压缩封装(共享)
- ZLib,GZip,Zip压缩与解压缩工具类
- Python3 压缩与解压缩(zlib / gzip / bz2 / lzma / zipfile / tarfile)
- Python3 压缩与解压缩(zlib / gzip / bz2 / lzma / zipfile / tarfile)
- Zlib gzip 解压缩
- zlib压缩解压缩文件
- android ZLib压缩/解压缩
- zlib gzip http
- zlib内存解压gzip
- Gzip压缩解压缩
- php gzip压缩解压缩
- gzip压缩解压缩数据
- 内存里面GZip压缩与解压缩的函数
- Gzip Zlib PNG 压缩算法
- 使用zlib压缩解压缩文件
- zlib minizip 压缩与解压缩
- java压缩,解压缩zlib文件
- MVC简单认识
- 关于Android4.0不能再线程下改变UI的解决方案
- 安卓笔记--- intent传递自定义类
- 拓扑排序之关键路径(深度优先搜索)
- <Button>按钮点击变换,<EditText>组建功能,<TditView>文本跑马效果,滚动视图
- zlib gzip http gizp 压缩,解压缩 isize 内存分配
- poj 2828
- Unity3D技术之从 Cinema 4D 中导入对象浅析
- GOT和PLT原理简析
- Square Coins(杭电1398)(母函数)
- 快速搭建Android开发环境ADT-Bundle及Hello World
- POJ 1828 Monkeys' Pride
- DP PKU 2138
- VMware vCenter MHM功能详解