// <streambuf>
// <iosfwd>
typedef basic_streambuf<char, char_traits<char> > streambuf;

streambuf 类是所有处理窄字符(char)的流缓存(Stream buffer)类的底层虚类(Base virtual class)。

  • streambuf 是 std::basic_streambuf 类模板的一个实例化(Instantiation),对应的模板参数为:

    模板参数 定义 注解
    charT char 在类模板内部,使用其别名为 char_type 的成员类型。
    traits char_traits<char> 在类模板内部,使用其别名为 traits_type 的成员类型。

    流缓存(Stream buffer)负责与其关联的流对象的读写操作:流对象会将它的所有此类操作委派(Delegate)到它所关联的流缓存对象中去。所以 streambuf 对象就像是流与对应的被控制的输入及输出序列(Sequence)之间的媒介。

    所有的流对象,不管它是否需要缓存,都有一个关联的流缓存对象。一些流缓存类型之后可以被设置以选择是否使用中间缓存(Intermediate buffer)。

    流缓存对象内部保存的信息,至少有:

    • 一个 std::locale 对象,用来进行本地化依赖(Locale-dependent)的操作。
    • 一系列用来维护输入缓存的内部指针:ebackgptregptr
    • 一系列用来维护输出缓存的内部指针:pbasepptrepptr

    在内部,std::streambuf 类是一个精心设计的基类(Base),用以为所有继承类(Derived classe)提供统一的公共接口(Public interface)。这些公共函数调用受保护的(Protected)虚成员函数,而基类可以重载这些虚函数以实现特定的行为。

  • char_type char
    traits_type char_traits<char>
    int_type int
    pos_type streampos
    off_type streamoff
  • (constructor) 构造对象
    (destructor) 析构对象

    本地化(Locale): 

    pubimbue 激活本地化
    getloc 获取当前本地化

    缓存管理(Buffer management)及定位(Position)

    pubsetbuf 设置缓存数组
    pubseekoff 设置指向相对位置的内部位置指针(Internal position)
    pubseekpos 设置指向绝对位置的内部位置指针
    pubsync 同步(Synchronize)流缓存

    输入函数

    in_avail 获取可读的字符数
    snextc 前进到下一位置且获取字符
    sbumpc 获取当前字符且前进到下一位置
    sgetc 获取当前字符
    sgetn 获取字符序列
    sputbackc 放回一个字符
    sungetc 减小当前位置

    输出函数

    sputc 存储字符到当前位置且增加输出指针
    sputn 输出字符序列
  • 输入序列(Input sequence)

    eback 指向输入序列起始的指针
    gptr 指向输入序列当前位置的指针
    egptr 指向输入序列末尾的指针
    gbump 增加获取指针(Get pointer)的值
    setg 设置输入序列指针

    输出序列(Output sequence)

    pbase 指向输出序列起始的指针
    pptr 指向输出序列当前位置的指针
    epptr 指向输出序列末尾的指针
    pbump 增加放入指针(Put pointer)的值
    setp 设置输出序列指针

    拷贝

    operator= C++11 赋值
    swap C++11 交换
  • 本地化(Locale)

    imbue 激活本地化

    缓存管理(Buffer management)及定位(Positioning)

    setbuf 设置缓存内容
    seekoff 设置指向相对位置内部位置指针
    seekpos 设置指向绝对位置内部位置指针
    sync 同步流缓存

    输入函数

    showmanyc 获取可用字符的个数
    xsgetn 获取字符序列
    underflow 直接获取字符而不影响当前位置
    uflow 获取字符且增加当前位置
    pbackfail 放回字符且减小当前位置

    输出函数

    xsputn 放置字符序列
    overflow 直接放置字符而不影响当前位置