zlib 压缩管道
2008-10-22 19:25:36 来源:WEB开发网/*
Zlib 是常用的压缩库,在很多平台上使用,是用c和部分汇编完成的,提供的是基于c接口的使用函数
在zlib 的contrib中提供了三种基于iostream的使用方式.
在MFC中,经常使用CFile进行文件的读写操作,在这种时候,如果想使用Zlib的话,要么使用zlib自身
提供的操作函数,要么使用zlib contrib中iostream操作流.或者自己对zlib进行封装.
所以我对zlib进行了封装,便于使用.
Filter 功能类
zlib_compress_filter<int 压缩级别> 实现压缩功能类,根据模板参数实现不同的压缩程度.
zlib_uncompress_filter<int > 实现解压功能类,模板参数总为 1
Filter类自身带有 缓冲区, 可以存储处理后的数据,用户可以直接通过这两个Filter类对数据进行
压缩和解压缩操作.
Pipe类
为了和MFC中的CFile类进行配接,对数据进行处理后,把CFile作为最后接受数据的容器,类似于
Boost库中的Sink,提供了一个模板实现的BufferPipe模板类.
template <typename filter,typename buffer_type, typename next_pipe> class BufferPipe;
模板参数:
filter 数据处理用filter
buffer_type 缓冲类型
next_pipe 后面接的pipe,可以是CFile,用于最终写入磁盘.
Pipe后还可以接一个Pipe,可以象一个管子连接起来,并且,以后通过扩充filter可以实现不同的数据操作功能.
提供了一个测试代码
编译后一个对话框 四个 按钮
按钮1 将 c:a.bmp 压缩为 c:b.cr 使用filter
按钮2 将 c:b.cr 解压缩为 c:c.bmp 使用filter
按钮3 将 c:a.bmp 压缩为 c:d.cr 使用pipe功能
按钮4 将 c:a.bmp 通过压缩和解压缩管道, 存储为 e.bmp应该和a.bmp相同,用于测试管道的连接功能.
代码位置:
http://www.cppblog.com/files/hdqqq/z_file.rar
编译需要的zlib 请自行到该库的网站下载.
这个文章实现的和boost中的filter类似的功能,可以和MFC配合使用.
不足:
fiter 使用的 buf_holder写得比较粗糙,以后有机会的话,改进.
*/
更多精彩
赞助商链接