9.1.6 压缩与解压缩


class ObCompressor

{

public:

//数据压缩与解压缩接口

//@param[in]src_buff输入数据缓冲区

//@param[in]src_data_size输入数据大小

//@param[in/out]dst_buffer输出数据缓冲区

//@param[in]dst_buffer_size输出数据缓冲区大小

//@param[out]dst_data_size输出数据大小

virtual compress(const charsrc_buffer,const int64_t src_data_size,chardst_buffer,const int64_t dst_buffer_size,int64_t&dst_data_size)=0;

virtual decompress(const charsrc_buffer,const int64_t src_data_size,chardst_buffer,const int64_t dst_buffer_size,int64_t&dst_data_size)=0;

//获取压缩库名称

const char*get_compress_name()const;

//根据传入的大小计算压缩后最大可能的溢出大小

int64_t get_max_overflow_size(const int64_t src_data_size)const;

};


ObCompressor定义了压缩与解压缩的通用接口,具体的压缩库实现了这些接口。压缩库以动态库(.so)的形式存在,每个工作线程第一次调用compress或者decompress方法时将加载相应的动态库,这样便实现了压缩库的插件化。目前,支持的压缩库包括LZO[1]以及Snappy[2]

[1]LZO:见http://www.oberhumer.com/opensource/lzo/

[2]Snappy:Google开源的压缩库,见http://code.google.com/p/snappy/