C++ 请帮助我理解streambuf、stringbuf和stringstream之间的区别?

C++ 请帮助我理解streambuf、stringbuf和stringstream之间的区别?,c++,C++,请有人帮我理解“streambuf、stringbuf和stringstream”之间的区别 void f1(标准::字符串常量和文本) { std::stringstream流入(文本); coutAstringbuf由stringstream使用,它为流提供缓冲区。Astreambuf只是stringbuf的基类。如果需要格式化流的输入/输出(如在字符串中输入数字),您需要的是stringstream,否则您想继续使用一个简单的字符串。您自己不必为streambuf家族操心。streambu

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

void f1(标准::字符串常量和文本)
{
std::stringstream流入(文本);

coutA
stringbuf
stringstream
使用,它为流提供缓冲区。A
streambuf
只是
stringbuf
的基类。如果需要格式化流的输入/输出(如在字符串中输入数字),您需要的是
stringstream
,否则您想继续使用一个简单的
字符串
。您自己不必为
streambuf
家族操心。

streambuf是stringbuf和stringstream的基类,streambuf具有虚拟方法,实现类可以覆盖这些方法以提供特定的实现。stringstream是一个c包含stringbuf的类,因此其功能可能与stringbuf本身略有不同。

一个
std::stringstream
对象包含一个
std::stringbuf
对象,该对象用作流操作符操作的底层数据缓冲区。
stringbuf
对象基本上是一个wrapper围绕字符串类型…因此您基本上是使用
>
从字符串类型对象插入和提取,对于来自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).

我对Java不太熟悉,但是一个
streambuf
不是更像一个
ByteBuffer
streambuf
不是抽象的,iirc,它的工作原理非常像一个字节(char)通过查看C++标准库引用,它说明了流Buf是抽象的,因此它不能直接实例化。如果我错了,我道歉。我找不到任何公共构造函数或静态初始化器方法。而且,当我看到溢出和下溢方法时,它让我觉得StRuBuf不仅仅是JavaNIO.Puffic。(或ByteBuffer)但是也有java.nio.Charset.CharacterEncoder/Decoder的特性。对于java,ByteBuffer很重要,因为它是在内核和jvm堆内存之间发送/接收字节流而不复制开销的唯一桥梁。但是我看不到ByteBuffer在stream/stringbuf中的任何好处。我总是使用std::string来完成java.lan的工作g、 StringBuilder是必需的。我通过使用
streambuf
“打扰”程序,使程序速度大大加快,所以我不会说它从来都没有用过。
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;
 }