β

gzip和zlib的关系

鱼儿的博客 51 阅读
php

这两天做一个日志上报SDK,需要与logstash直接通讯。

因为日志是批量上报的,很多类似于时间、应用名、日志级别的内容在每一行日志都会重复,所以我们协商采用gzip压缩,logstash自带插件支持。

结果打开 php.net官方手册 ,发现zlib库里有好几套压缩/解压缩函数,到底哪一套才能与java适配呢?

其实还是对gzip体系了解不清楚的原因,所以打开 维基百科gzip:

zlib 是DEFLATE算法的实现库,它的API同时支持gzip文件格式以及一个简化的数据流格式。zlib数据流格式、DEFLATE以及gzip文件格式均已被分别标准化为 RFC 1950 RFC 1951 RFC 1952

这里有2个概念:

  1. zlib是gz系列压缩算法的实现库。
  2. zlib库支持3种压缩算法,包括:zlib数据流格式(zlib自创的)、deflate、gzip格式。

zlib数据流格式,在PHP中对应方法: gzcompress gzuncompress ,底层都是调用zlib库。

deflate是什么呢?

gzip的基础是 DEFLATE ,DEFLATE是 LZ77 哈夫曼编码 的一个组合体。

看的出来,是一个压缩算法,也是gzip算法的基础。

deflate在PHP中对应方法: gzinflate gzdeflate

那么gzip和deflate是什么关系呢?

gzip文件格式说明:

显然,gzip会用到deflate算法压缩数据,但是还会添加一些其他的信息到输出结果中。

gzip在PHP中对应方法: gzencode gzdecode

关于gzip的来龙去脉,大家 理解了吗?

php
作者:鱼儿的博客
斯是陋室,惟吾德馨
原文地址:gzip和zlib的关系, 感谢原作者分享。

发表评论