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大部分属于只依赖头文件,如 stream
, stream_buffer
,filtering_stream
和 filtering_streambuf
boost/iostreams/device/file_descriptor.hpp
file_descriptor.cpp
-boost/iostreams/device/mapped_file.hpp
mapped_file.cpp
-boost/iostreams/filter/bzip2.hpp
bzip2.cpp
libbz2boost/iostreams/filter/gzip.hpp
gzip.cpp
, zlib.cpp
zlibboost/iostreams/filter/regex.hpp
-Boost.Regexboost/iostreams/filter/zlib.hpp
zlib.cpp
zlibNO_COMPRESSION
关闭压缩过滤器的支持-NO_BZIP2
关闭 bzip2 过滤器的支持1
(Windows)BZIP2_BINARY
libbz2 二进制文件的名字,不包括文件扩展名,及UNIX的 "lib" 前缀。对于 Windows, 如果链接 libbz2 的动态构建,指定导入库的名字bz2
(UNIX)libbz2
(Windows)BZIP2_INCLUDE
libbz2 头文件的路径,如果它们不是位于可以自动找到的位置BZIP2_SOURCE
BZIP2_LIBPATH
libbz2 二进制文件的路径,如果它们不是位于可以自动找到的位置。对于 Windows, 如果链接 libbz2 的动态构建,指定导入库的名字-BZIP2_SOURCE
Path to the libbz2 源文件的路径,如果它们不是位于可以自动找到的位置-NO_ZLIB
关闭 zlib 过滤器的支持1
(Windows)ZLIB_BINARY
zlib 二进制文件的名字,不包括文件扩展名,及UNIX的 "lib" 前缀。对于 Windows, 如果链接 libbz2 的动态构建,指定导入库的名字z
(UNIX)zdll
(Windows)ZLIB_INCLUDE
zlib 头文件的路径,如果它们不是位于可以自动找到的位置ZLIB_SOURCE
ZLIB_LIBPATH
zlib 二进制文件的路径,如果它们不是位于可以自动找到的位置。对于 Windows, 如果链接 zlib 的动态构建,指定导入库的名字-ZLIB_SOURCE
zlib 源文件的路径,如果它们不是位于可以自动找到的位置-上面已经说明很清楚,对于压缩流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_stream
. filtering_streambuf
或 filtering_stream
的实例含有过滤器和设备的 chains链
,使用类似于std::stack
的接口来访问。
3. boost 数据流压缩
重点介绍下数据流的压缩,正如前面所说,可用于创建访问TCP连接的流,或者用作加密和数据压缩的框架,可以将通信中的数据流进行压缩,或者加上一些加密算法从而达到传输效率和传输安全性能上的提高。
- Boost::iostreams 库编译和压缩数据流
- 使用boost::iostreams库压缩和解压数据
- boost 1.47.0 linux/windows 编译库:regex与iostreams
- 整合protobuf、boost::iostreams和NetMessage类
- boost iostreams 压缩文件
- C++ Boost Iostreams
- boost翻译(3):boost.iostreams简介
- 使用Boost.Iostreams实现bzip2格式文件流
- c#中关于压缩数据流和解压数据流的实现
- boost翻译(4):boost.iostreams指南--使用Devices
- boost翻译(5):boost.iostreams指南--使用Filters(1)
- boost翻译(6):boost.iostreams指南--使用Filters(2)
- boost翻译(7):boost.iostreams指南--使用Filters(3)
- C#之数据流和字符串压缩
- Boost库的使用和编译
- boost库编译、安装和卸载总结
- boost库生成文件命名和编译
- Linux编译和安装boost库
- Luhan
- Android 4.4 Kitkat Phone工作流程浅析(一)__概要和学习计划
- iOS:GCD进行延迟执行任务
- HDU 3400 Line belt
- Ubentu系统下Qt开发出现“Undefined reference to utable for ...”
- Boost::iostreams 库编译和压缩数据流
- 【iOS】iPhone4 无SHSH备份如何降级至6.1.2版本?
- cocos2d-x应用窗口相关源码剖析5-其他细节
- linux系统中如何查看日志 (常用命令)
- cocos2d-x 骨骼动画详解
- TimePicker点击上下方向键 java.lang.NullPointerException异常
- 函数指针之成员函数指针
- Centos安装JDK,RPM安装JDK经典教程
- android breakpad批量解析dmp的shell脚本