欢迎来到天天文库
浏览记录
ID:38495739
大小:129.67 KB
页数:15页
时间:2019-06-13
《POCO C++库学习和分析 -- 流 (三)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、POCOC++库学习和分析--流 (三)5.ZLibStream流 Poco::DeflatingInputStream、Poco::DeflatingOutputStream、Poco::InflatingInputStream和Poco::InflatingOutputStream把zlib的压缩过程封装成为流方式。在讨论其实现之前,先来了解一下涉及到的压缩和校验算法。5.1zlib库 在Poco中实现的压缩过程是通过zlib库实现的。下面对zlib的介绍主要来自于wiki百科。 zlib是提供资料压缩之用的函式库,由
2、Jean-loupGailly与MarkAdler所开发,初版0.9版在1995年5月1日发表。 zlib目前应用很广泛,下面是其一些应用例子: *Linux核心:使用zlib以实作网络协定的压缩、档案系统的压缩以及开机时解压缩自身的核心。 *libpng,用于PNG图形格式的一个实现,对bitmap数据规定了DEFLATE作为流压缩方法。 *Apache:使用zlib实作http1.1。 *OpenSSH、OpenSSL:以zlib达到最佳化加密网络传输。 *F
3、Fmpeg:以zlib读写Matroska等以DEFLATE算法压缩的多媒体串流格式。 *rsync:以zlib最佳化远端同步时的传输。 *ThedpkgandRPMpackagemanagers,whichusezlibtounpackfilesfromcompressedsoftwarepackages. *Subversion、Git和CVS版本控制系统,使用zlib来压缩和远端仓库的通讯流量。 *dpkg和RPM等包管理软件:以zlib解压缩RPM或者其他封包。 *
4、因为其代码的可移植性,宽松的许可以及较小的内存占用,zlib在许多嵌入式设备中也有应用。 zlib支持两种封装格式:gzip和zlibstream。二者都是对deflate压缩算法的封装。HTTP1.1(rfc2616)里的gzip就代表gzip,而deflate则代表zlibstream,并非rawdeflate。(这里rawdeflate是指不加头的使用deflate算法压缩的原始数据)。下面是gzip和zlib的格式示意。 按照gzip的RFC1952,gzip压缩格式包含如下部分:[plain] viewplaincopy1
5、.+---+---+---+---+---+---+---+---+---+---+ 2.
6、ID1
7、ID2
8、CM
9、FLG
10、 MTIME
11、XFL
12、OS
13、 (more-->) 3.+---+---+---+---+---+---+---+---+---+---+ 4.+=======================+ 5.
14、...compressed blocks...
15、 (more-->) 6.+=======================+ 7. 0 1 2 3 4 5 6 7 8.+
16、---+---+---+---+---+---+---+---+ 9.
17、 CRC32
18、 ISIZE
19、 10.+---+---+---+---+---+---+---+---+ zlib的格式大致如下:[plain] viewplaincopy1.+----+-----+ 2.
20、CMF
21、FLG
22、 (more-->) 3.+----+-----+ 4.(if FLG.FDICT set) 5.0 1 2 3 6.+-----+-----+-----+-----+
23、 7.
24、 DICTID
25、 (more-->) 8.+-----+-----+-----+-----+ 9.+======================== 10.
26、 ...compressed data...
27、 11.+======================== 12.+-----+-----+-----+-----+ 13.
28、 ADLER32
29、 14.+-----+-----+-----+-----+ 注: 在上面的图中,像这样的框
30、,代表一个字节[plain] viewplaincopy1.+---+ 2.
31、
32、 <
此文档下载收益归作者所有