【基本上没看懂,那个大神如果可以的话,推荐一点相关资料,真的不太明白这个缓冲区的内部原理】
3 自定义缓冲区
- 缓冲区有
basic_streambuf
定义,针对字型为char和wchar - 标准库提供了预定义的
streambuf
和wstreambuf
缓冲区的主要接口由函数返回的三个指针构成:
(1) read(input)缓冲区的接口由:
- eback()
- gptr()
- egptr()
(2) write(output)缓冲区的接口:
- pbase() :Outputstream缓冲区的起始位置;
- pptr() : 当前写入位置;
- epptr() : Output缓冲区的结尾,指向“最后一个缓冲的字符”的后一个位置;
pbase和pptr中间的字符序列已被写到相应的通道,但未被清空;
缓冲的写入成员函数:
- sputc() : 写入一个字符,如果w缓冲区有空的改写位置,字符被复制到该位置上,然后指针指向下一个位置;如果缓冲区是满的,调用虚函数overflow()将缓冲区发送到对应输出通道;basic_streambuf实例化的overflow()只返回end-of-fiel(),表示没有位置写入;
3.1 overflow()详解
受保护的成员函数(protected virtual member)
函数原型:
std::basic_streambuf::overflow