定义于头文件 <streambuf>
template< class CharT, |
类 basic_streambuf
控制字符序列的输入与输出。它包含下列内容并提供到它们的访问:
1) 受控制字符序列,又称为缓冲区,它可含有为输入操作缓冲的输入序列(又称为获取区),和/或为输出操作缓冲的输出序列(又称为放置区)。
2) 关联字符序列,又称作源(对于输入)或池(对于输出)。它可以是通过 OS API 访问的实体(文件、 TCP 接头、串行端口、其他字符设备),或者可以是能转译成字符源或池的对象( std::vector 、数组、字符串字面量)。
I/O 流对象 std::basic_istream 及 std::basic_ostream ,还有所有导出自它们的对象( std::ofstream 、 std::stringstream 等),都完全以 std::basic_streambuf 实现。
成员函数
放置区
写一个字符到放置区域,并令 next 指针前进
std::basic_streambuf<CharT,Traits>::sputc
int_type sputc( char_type ch ); |
写一个字符到输出序列。
若输出序列写位置不可用(缓冲区满),则调用 overflow(ch) 。
参数
ch | - | 要写入的字符 |
返回值
被写入的字符,成功时用 Traits::to_int_type(ch) 转换成 int_type
。
失败时为 Traits::eof() (为 overflow() 所返回)。
调用示例
#include <iostream>
#include <sstream>
int main()
{
std::ostringstream s;
s.rdbuf()->sputc('a');
std::cout << s.str() << '\n';
}
调用 xsputn()
std::basic_streambuf<CharT,Traits>::sputn,
std::basic_streambuf<CharT,Traits>::xsputn
std::streamsize sputn( const char_type* s, std::streamsize count ); | (1) | |
protected: | (2) |
1) 调用最终导出类的 xsputn(s, count)
。
2) 从首元素为 s
所指向的数组写 count
个字符到输出序列。如同以重复调用 sputc() 写入字符。在写入 count
字符后或调用 sputc() 会返回 Traits::eof() 时写入停止。
若放置区变满( pptr() == epptr() ),则此函数可调用 overflow() ,或以其他未指定手段达成调用 overflow()
的效果。
参数
(无)
返回值
成功写入的字符数。
注意
“以未指定手段达成 overflow()
的效果”容许无中间缓冲的大量 I/O :这是一些 iostream 的实现中, std::ofstream::write 简单地传递指针给 POSIX write()
系统调用的缘由。
调用示例
#include <iostream>
#include <sstream>
int main()
{
std::ostringstream s1;
std::streamsize sz = s1.rdbuf()->sputn("This is a test", 14);
s1 << '\n';
std::cout << "The call to sputn() returned " << sz << '\n'
<< "The output sequence contains " << s1.str();
std::istringstream s2;
sz = s2.rdbuf()->sputn("This is a test", 14);
std::cout << "The call to sputn() on an input stream returned " << sz << '\n';
}