繁体   English   中英

请帮我理解streambuf,stringbuf和stringstream之间的区别?

[英]Please help me to understand the difference between streambuf, stringbuf and stringstream?

请有人帮助我理解“streambuf,stringbuf和stringstream”之间的区别。

void f1(std::string const& text)
{
     std::stringstream           inStream(text);
    cout<<inStream.str()<<endl;
 }

或者如果我写

void f2(std::string const& text)
{
    std::stringbuf           inStream(text);
    cout<<inStream.str()<<endl;
 }

两者都显示相同的结果。 我什么时候应该使用stringbuf或stringstream? 提前致谢。

stringbufstringstream ,它为流提供缓冲区。 一个streambuf仅仅是一个基类stringbuf 你想要的是一个stringstream ,如果你需要格式化输入/输出入/出流(比如把号码串),否则您希望继续使用一个简单的string 你永远不需要自己打扰streambuf家庭。

std::stringstream对象包含一个std::stringbuf对象,该对象充当流操作符正在操作的底层数据缓冲区。 stringbuf对象基本上是一个字符串类型的包装器......所以你基本上是使用>><<运算符通过stringstream接口从字符串类型的对象中插入和提取。 另一方面, streambuf对象是使用stdinstdoutstderrfstream对象时用于文件I / O的底层I / O内存缓冲区。 如果你看一下标准的C风格的I / O函数,不同之处就像你必须为像sprintf这样的函数提供一个内存缓冲区来工作,其中fprintf写入底层的托管I / O缓冲区。 对于C ++, stringbuf对象允许您访问stringstream对象的底层内存缓冲区。

对于那些来自Java的人:

  • stringbuf => java.nio.ByteBuffer
  • streambuf => java.nio.Buffer(抽象,与streambuf相同)
  • stringstream => java.nio.Channel.newReader(...)+ java.nio.Channel.newWriter(...)

我被赋予了stringbuf,streambuf,stringstream,istringstream,ostringstream,iostream,io_base等的类层次结构与2003~2004左右发布的Java Nio类的惊人相同(参考Jdk 1.4 Nio)。

streambuf是stringbuf和stringstream的基类,streambuf具有实现类可以覆盖以提供特定实现的虚方法。 stringstream是一个包含stringbuf的类,因此可以比单独的stringbuf具有稍微不同的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM