Boost::iostreams 库编译和压缩数据流

来源:互联网 发布:win10添加ubuntu启动项 编辑:程序博客网 时间:2024/05/17 06:12

摘要


好记忆不如烂笔头,很多时候当时明明弄得很透彻的东西,很可能过段时间就全部的忘记了。


内容

  • 1. iostreams库编译和简介
  • 2. boost流
  • 3. boost 数据流压缩

1. iostreams 库编译

Boost.Iostreams 有三个目标:

  • 更易于创建标准C++流和流缓冲来访问新的 Sources来源 和 Sinks接收器。
  • 提供一个定义 Filters过滤器 的框架,将它们用于标准流和流缓冲。
  • 提供一组可用的过滤器、来源和接收器。

例如,Boost.Iostreams 可用于创建访问TCP连接的流,或者用作加密和数据压缩的框架。本库包括以下组件:访问 内存映象文件,用操作系统的 文件描述符 进行文件访问,代码转换,用 正则表达式 进行文本过滤,换行符转换,以及 zlib, gzip 和 bzip2 格式的压缩与解压。

上面是官方文档对boost.iostreams库,简要的概括和用途介绍,这里我主要介绍下后面zlib,gzip格式压缩解压。

先介绍一下iostreams库编译build

其实iostreams大部分属于只依赖头文件,如 streamstream_buffer,filtering_stream 和 filtering_streambuf 

HeaderSource FileExternal Libraryboost/iostreams/device/file_descriptor.hppfile_descriptor.cpp-boost/iostreams/device/mapped_file.hppmapped_file.cpp-boost/iostreams/filter/bzip2.hppbzip2.cpplibbz2boost/iostreams/filter/gzip.hppgzip.cppzlib.cppzlibboost/iostreams/filter/regex.hpp-Boost.Regexboost/iostreams/filter/zlib.hppzlib.cppzlib
变量解释缺省NO_COMPRESSION关闭压缩过滤器的支持-NO_BZIP2关闭 bzip2 过滤器的支持1 (Windows)BZIP2_BINARYlibbz2 二进制文件的名字,不包括文件扩展名,及UNIX的 "lib" 前缀。对于 Windows, 如果链接 libbz2 的动态构建,指定导入库的名字bz2 (UNIX)
libbz2 (Windows)BZIP2_INCLUDElibbz2 头文件的路径,如果它们不是位于可以自动找到的位置BZIP2_SOURCEBZIP2_LIBPATHlibbz2 二进制文件的路径,如果它们不是位于可以自动找到的位置。对于 Windows, 如果链接 libbz2 的动态构建,指定导入库的名字-BZIP2_SOURCEPath to the libbz2 源文件的路径,如果它们不是位于可以自动找到的位置-NO_ZLIB关闭 zlib 过滤器的支持1 (Windows)ZLIB_BINARYzlib 二进制文件的名字,不包括文件扩展名,及UNIX的 "lib" 前缀。对于 Windows, 如果链接 libbz2 的动态构建,指定导入库的名字z (UNIX)
zdll (Windows)ZLIB_INCLUDEzlib 头文件的路径,如果它们不是位于可以自动找到的位置ZLIB_SOURCEZLIB_LIBPATHzlib 二进制文件的路径,如果它们不是位于可以自动找到的位置。对于 Windows, 如果链接 zlib 的动态构建,指定导入库的名字-ZLIB_SOURCEzlib 源文件的路径,如果它们不是位于可以自动找到的位置-

   上面已经说明很清楚,对于压缩流zlib,gzip,bzip2需要依赖外库libbz2和zlib库,当然boost是对zlib库函数基础上进行的封装。

1. 下载zlib和libbz2源码包。

     zlib源码包:http://www.zlib.net/

     libbz2源码包:http://www.bzip.org/

2. 设置源码包路径

         ZLIB_INCLUDE和BZIP2_SOURCE

如在unix下面编译可以设置在环境变量中

export ZLIB_INCLUDE=$INSTALL_PATHexport BZIP2_SOURCE=$INSTALL_PATH

下面我们直接编译就好了

 ./bjam --toolset=gcc --with-iostreams  runtime-link=static link=static stage 

2. boost流

类模板 stream_buffer 和 stream 实现了标准的流缓冲和流,它们通过委托给内含的 设备 来执行 I/O。可以通过使用成员函数 open,is_open 和 close 来访问设备,它们提供了类似于标准的基于文件的流和流缓冲的接口。
对于过滤,Boost.Iostreams 提供了模板 filtering_streambuf 和 filtering_streamfiltering_streambuf 或 filtering_stream 的实例含有过滤器和设备的 chains链,使用类似于std::stack 的接口来访问。


3. boost 数据流压缩

重点介绍下数据流的压缩,正如前面所说,可用于创建访问TCP连接的流,或者用作加密和数据压缩的框架,可以将通信中的数据流进行压缩,或者加上一些加密算法从而达到传输效率和传输安全性能上的提高。



参考文章:
使用boost::iostreams库压缩和解压数据》 
boost iostreams 压缩文件
 boost 官方文档


0 0
原创粉丝点击