C++ 头文件系列(streambuf)
1. 简介
该头文件定义了basic_streambuf模版,从字面上看是作为流缓冲区之用。
2. basic_streambuf模版
The class template basic_stream< charT, traits > serves as an abstract base class for deriving various stream buffers whose objects each control two character sequences:
—— a character input sequence;
—— a character output sequence.
上面这段话(摘自C++14草案)的大概意思是说:basic_streambuf模版的目的是作为各种各样的 派生流缓冲区 的虚基类, 这些流缓冲区控制两个字符序列----一个输入一个输出。
2.1 控制 输入/输出流
streambuf不直接直接控制输入输出流,而是通过两个数组的六个指针来间接控制:

basc_streambuf模版分别为每一个流指针组提供了5个函数。
2.1.1 输入流指针函数
- eback : 返回输入流的首指针。
- gptr : 返回输入流的当前指针。
- egptr : 返回输入流的尾指针。
- gbump : 将当前指针前进n步。
- setg : 设置三个输入流指针。
2.1.2 输出流指针函数
- pbase : 返回输出流的首指针。
- pptr : 返回输出流的当前指针。
- epptr : 返回输出流的尾指针。
- pbump : 将当前指针步进n步。
- setp : 设置三个输出流指针。
2.2 virtual函数
这些虚函数为protected,旨在为派生的类提供机会来自定义一些共有的行为。 注意,这些虚函数的定义很抽象(作为基类抽象函数),并且在基类中都 定义为空。
2.2.1 本地化
- imbue : “注入”本地化对象。
2.2.2 缓冲区管理和定位
- setbuf : 设置缓冲区。
- seekoff、seekpos : 更改缓冲区中当前字符位置。
- sync : 同步缓冲区与控制字符流。
2.2.3 输入函数
- showmanyc : 返回输入字符流中当前大概可获得的字符数。
- xsgetn : 从输入字符流中获取n个字符。
- underflow : 从输入字符流获取当前字符,不改变当前位置。(具体作用不是很明白,有待探究)
- uflow : 从输入字符流获取当前字符,步进当前位置,默认实现为调用underflow()。
- pbackfail : 将给定字符放回输入字符流。 该函数仅当没有放回位置或者放回的字符与缓冲区中的字符不一致时才被调用,故后缀fail。
2.2.4 输出函数
- xsputn : 将n个字符写到输出字符流。
- overflow : 将字符写到输出字符流。
2.3 public函数
2.3.1 本地化
- pubimbue : 调用虚函数imbue。
- getloc : 返回当前本地化对象(locale)。
2.3.2 缓冲区管理和定位
- pubsetbuf :调用虚函数setbuf。
- pubseekoff : 调用虚函数seekoff。
- pubsync : 调用虚函数sync。
2.3.3 输入函数
- in_avail : 如果读取位置可获得,返回当前可获得的字符数;否则,调用虚函数showmanyc。
- snextc : 步进当前位置,并且返回当前字符。
- sbumpc : 如果输入流读取位置可获得,获取当前字符,并且步进当前位置; 否则,调用虚函数uflow。
- sgetc : 如果输入流读取位置可获得,返回当前字符; 否则,调用虚函数underflow。
- sgetn : 获取n个字符,调用虚函数xsgetn。
- sputbackc : 放回给定字符,若无法放回则调用虚函数pbackfail。
- sungetc : 递减当前位置,并返回当前字符。
2.3.4 输出函数
- sputc : 如果输出流写位置可获得,输出一个字符; 否则,调用虚函数overflow。
- sputn : 输出n个字符,调用虚函数xsputn。
3 typedefs
typedef basic_streambuf<char> streambuf;typedef basic_streambuf<wchar_t> wstreambuf;
C++ 头文件系列(streambuf)的更多相关文章
- C++ 头文件系列(array)
注意,该头文件仅在C++11中标准才开始出现. 简介 与语言内置的数组一样, array类模版支持几乎所有内置数组包含的特性: 顺序的(sequence) 内存连续的(contiguous stora ...
- C++ 头文件系列(queue)
简介 这个头文件定义了两个跟队列有关的类----quque.priority_queue,分别实现的是队列 和 优先队列这两个概念. 但是与这两个类模版与其它类模版(vector.array等)最大的 ...
- C++ 头文件系列(stack)
简介 该头文件只含有一个类模版stack, 它实现栈的概念,是一个容器适配器(说实话,在写这篇随笔之前我都不知道有这么个类模版). 栈 栈只有一个重要的特性: LIFO(last-in first-o ...
- C++ 头文件系列(vector)
简介 vector头文件包含vector的类模版以及该模版的显示特化版本vector< bool >. vector是C++容器库中非常通用的一种容器,如果你不知道该决定使用哪一种容器,或 ...
- C++ 头文件系列(map)
简介 该头文件包含两个概念相似的容器----map.multimap. 而这两个容器反映的概念就是 映射. 这两个容器 相同 的属性有: 关联性 映射 动态增长 键(Key)唯一性 这两个不相同的属性 ...
- C++ 头文件系列(unordered_map、unordered_set)
简介 很明显,这两个头文件分别是map.set头文件对应的unordered版本. 所以它们有一个重要的性质就是: 乱序 如何乱序 这个unorder暗示着,这两个头文件中类的底层实现----Hash ...
- C++ 头文件系列(iterator)
简介 该头文件围绕迭代器展开,定义了一系列与迭代器有关的概念,但最最最重要的一点就是----它和其它容器一起实现了C++容器的Iterator设计模式. Iterators are a general ...
- C++ 头文件系列 (algorithm)
简介 algorithm头文件是C++的标准算法库,它主要应用在容器上. 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性. 因此,任何 ...
- C++ 头文件系列 (bitset)
简介 该头文件有关位集,实际上是vector 位 位本质上对应bool的概念,只有0或1,true或false两种对立的值. 但很可惜,字节才是机器上最小的存储单元,所以bool基本上是由一个字节大小 ...
随机推荐
- mysql中TPS, QPS 的计算方式
今天突然有个同事问题一个问题, mysqlTPS和QPS的计算公式是什么? 以前确实也没有关注过这个计算公式,所以查了下学习了下: 下面是参考内容. 在做db基准测试的时候,qps,tps 是衡量数 ...
- IOS9提示“不受信任的开发者”如何处理
iPhone升级到IOS9版本后,发现部分APP在下载后首次运行时,都会提示“不受信任的应用程序开发者”,这是因为企业证书发布的APP,没有经过AppStore审核,于是iOS对用户做出一个安全性的提 ...
- MySQL导入sql脚本中文乱码设置和常用命令
1. use database_name; 2. set names utf8; (或其他需要的编码) 3. source example.sql (sql文件存放路径) Mysql安装目录数据库目录 ...
- [转] 如何让CloudStack使用KVM创建Windows实例成功识别并挂载数据盘
在使用kvm给windows虚拟机动态挂载virtio类型的硬盘时候遇到问题,通过下面的文章知道需要安装virtio驱动,从而解决问题使挂在正常,在此处mark一下 问题产生背景: 使用CloudSt ...
- 如何获得keyhash
keyhash是由keystore产生的 三个命令解决问题 keytool -exportcert -alias androiddebugkey -keystore debug.keystore &g ...
- php-fpm 相关
ps aux | grep -c php-fpm 查看php-fpm进程数:ps aux | grep -c php-fpm 查看运行内存/usr/bin/php -i|grep mem 重启php ...
- Python3基础 内嵌函数 简单示例
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- 会话Cookie及session的关系(Cookie & Session)
会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...
- delphi popupmenu控件用法
是,右键菜单控件,和特定的窗体控件的popmenu属性关联就可以了 添加一个popupmenu控件,双击该控件,在弹出的界面中设置好name以及caption属性,点击事件的做法就跟button一样了 ...
- oracle 查询哪些表分区
如果查询当前用户下得分区表:select * from user_tables where partitioned='YES'如果要查询整个数据库中的分区表:select * from dba_tab ...