这两天做一个日志上报SDK,需要与logstash直接通讯。
因为日志是批量上报的,很多类似于时间、应用名、日志级别的内容在每一行日志都会重复,所以我们协商采用gzip压缩,logstash自带插件支持。
结果打开php.net官方手册,发现zlib库里有好几套压缩/解压缩函数,到底哪一套才能与java适配呢?
其实还是对gzip体系了解不清楚的原因,所以打开维基百科gzip:
zlib是DEFLATE算法的实现库,它的API同时支持gzip文件格式以及一个简化的数据流格式。zlib数据流格式、DEFLATE以及gzip文件格式均已被分别标准化为 RFC 1950、RFC 1951、RFC 1952。
这里有2个概念:
- zlib是gz系列压缩算法的实现库。
- zlib库支持3种压缩算法,包括:zlib数据流格式(zlib自创的)、deflate、gzip格式。
zlib数据流格式,在PHP中对应方法:gzcompress与gzuncompress,底层都是调用zlib库。
deflate是什么呢?
看的出来,是一个压缩算法,也是gzip算法的基础。
deflate在PHP中对应方法:gzinflate与gzdeflate。
那么gzip和deflate是什么关系呢?
gzip文件格式说明:
显然,gzip会用到deflate算法压缩数据,但是还会添加一些其他的信息到输出结果中。
gzip在PHP中对应方法:gzencode与gzdecode。
关于gzip的来龙去脉,大家 理解了吗?
如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~

Pingback引用通告: gzip和zlib的关系 - 点击领取