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)的更多相关文章

  1. C++ 头文件系列(array)

    注意,该头文件仅在C++11中标准才开始出现. 简介 与语言内置的数组一样, array类模版支持几乎所有内置数组包含的特性: 顺序的(sequence) 内存连续的(contiguous stora ...

  2. C++ 头文件系列(queue)

    简介 这个头文件定义了两个跟队列有关的类----quque.priority_queue,分别实现的是队列 和 优先队列这两个概念. 但是与这两个类模版与其它类模版(vector.array等)最大的 ...

  3. C++ 头文件系列(stack)

    简介 该头文件只含有一个类模版stack, 它实现栈的概念,是一个容器适配器(说实话,在写这篇随笔之前我都不知道有这么个类模版). 栈 栈只有一个重要的特性: LIFO(last-in first-o ...

  4. C++ 头文件系列(vector)

    简介 vector头文件包含vector的类模版以及该模版的显示特化版本vector< bool >. vector是C++容器库中非常通用的一种容器,如果你不知道该决定使用哪一种容器,或 ...

  5. C++ 头文件系列(map)

    简介 该头文件包含两个概念相似的容器----map.multimap. 而这两个容器反映的概念就是 映射. 这两个容器 相同 的属性有: 关联性 映射 动态增长 键(Key)唯一性 这两个不相同的属性 ...

  6. C++ 头文件系列(unordered_map、unordered_set)

    简介 很明显,这两个头文件分别是map.set头文件对应的unordered版本. 所以它们有一个重要的性质就是: 乱序 如何乱序 这个unorder暗示着,这两个头文件中类的底层实现----Hash ...

  7. C++ 头文件系列(iterator)

    简介 该头文件围绕迭代器展开,定义了一系列与迭代器有关的概念,但最最最重要的一点就是----它和其它容器一起实现了C++容器的Iterator设计模式. Iterators are a general ...

  8. C++ 头文件系列 (algorithm)

    简介 algorithm头文件是C++的标准算法库,它主要应用在容器上. 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性. 因此,任何 ...

  9. C++ 头文件系列 (bitset)

    简介 该头文件有关位集,实际上是vector 位 位本质上对应bool的概念,只有0或1,true或false两种对立的值. 但很可惜,字节才是机器上最小的存储单元,所以bool基本上是由一个字节大小 ...

随机推荐

  1. 301、302、200、206、304、404等HTTP状态引见(转载)

    该文章来自网上转载,感谢他的辛勤付出! 如果向您的服务器发出了某项请求要求显示您网站上的某个网页,那么,您的服务器会返回 HTTP 状态代码以响应该请求. 一些常见的状态代码为: 200 - 服务器成 ...

  2. 【转】国外程序员整理的 C++ 资源大全

    内容包括:标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等. 标准库 C++标准库,包括了STL容器,算法和函数等. C++ Standard Library:是一系列类 ...

  3. 理解Action,Service和Dao功能(转)

    真正理解.区分Action,Service和Dao功能   在不分层的系统里,我们可以将所有的代码都写到一个地方,比如struts的Action类.在这里,我们不仅要处理页面逻辑,还要做业务逻辑,还要 ...

  4. UnitOfWork实战

    企业模式之Unit Of Work模式 在开始UnitOfWork模式之前有必要回顾下我们耳熟能详的Data Access Object(DAO)模式,即数据访问对象.DAO是一种简单的模式,我们构建 ...

  5. 数据可视化-OmniGraffle软件

    OmniGraffle Pro for mac破解版是一款运行在MAC OS平台上的思维导图流程图制作软件,通过思维导图软件(OmniGraffle Pro MAC)帮你组织头脑中思考的信息,组织头脑 ...

  6. IOS 程序图标添加数字

    +(void)setAppIconNumber:(NSInteger)num{ if ([UIParam getIOSVersion]>8.0) { UIUserNotificationSett ...

  7. Eclipse和debug的一些快捷键

    F5单步调试进入函数内部.  F6单步调试不进入函数内部,如果装了金山词霸2006则要把“取词开关”的快捷键改成其他的.  F7由函数内部返回到调用处.  F8一直执行到下一个断点.  F11 这个好 ...

  8. SQL 日期筛选的两种方式

    主要解决的是后一天的问题~容易漏掉最后一天~第一种方法,拼接String,第二种方法直接在最后一天加一天 第一: <if test="beginDate != null and beg ...

  9. PHP 文件上传全攻略

    PHP文件上传功能一般都是大家使用事先封装好的函数,要用的时候直接使用已封装的函数就完了,但有时候不能使用封装函数,还真不大能记住PHP的上传相关的东西,在此做个总结,以备后用.   1.表单部分 允 ...

  10. 一步一步Asp.Net MVC系列_权限管理设计

    http://www.cnblogs.com/mysweet/archive/2012/07/26/2610793.html