spdy_zlib: 工具类,用于对数据进行deflate/gzip压缩,本身是对zlib库的定制化包装:
<1> 采用了头文件定义接口,实际实现类则通过继承此接口类在cc文件中定义,对外封闭。
通过gz * get_context() 获得可用的GZ对象(实际是实现类gzContextImpl 的对象)
<2> 3个操作方法:
bool uncompress( Binary_Buffer &data ):
将data中的数据进行解压,然后重新放回到data中
bool uncompress( Binary_Buffer &from, Binary_Buffer &to ):
将from的数据进行解压,然后放到 to中
bool compress( Binary_Buffer &data ):
将data中的数据解压,然后放回到data中。
注意的是,因为zlib库只接受Bytef指针作为数据的输入和输出,因此这里会调用binary_buffer的
data() 和 write_pointer() 来获得实际数据的内存地址来进行操作,而这样做会绕过binary_buffer内部的
自动调整机制(调整len, offset等状态值),因此还需要手动调用 consume() 和filled() 来调整offset和len等状态值。
binary_buffer的set()函数也在这里使用来将压缩/解压的数据整个覆盖式填充到binary_buffer中
<3> 因为get_context()返回的GZ对象是new的,而本身又没有自动释放功能,因此需要手动的在不再使用的时候free:
void free_conext( gz *x )