请帮助我理解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?提前谢谢。
stringbuf
由stringstream
使用,它为流提供缓冲区。streambuf
只是stringbuf
的基类。如果您需要格式化流的输入/输出(如将数字放入字符串中),那么您需要的是stringstream
,否则您希望继续使用简单的string
。你永远不应该为streambuf
家族而烦恼。
std::stringstream
对象包含一个std::stringbuf
对象,该对象用作流运算符正在操作的底层数据缓冲区。stringbuf
对象基本上是字符串类型的包装器。。。因此,您基本上是通过stringstream
接口使用>>
和<<
运算符从字符串类型对象中插入和提取。另一方面,当使用stdin
、stdout
、stderr
或fstream
对象时,streambuf
对象是用于文件I/O的底层I/O内存缓冲区。如果您查看标准的C风格I/O函数,不同的是您必须如何为sprintf
这样的函数提供内存缓冲区才能工作,其中fprintf
写入底层托管I/O缓冲区。在C++的情况下,stringbuf
对象允许您访问stringstream
对象的底层内存缓冲区。
streambuf是stringbuf和stringstream的基类,streambuf具有虚拟方法,实现类可以覆盖这些方法以提供特定的实现。stringstream是一个包含stringbuf的类,因此它的功能与单独使用stringbuf略有不同。
对于那些来自Java的人:
- stringbuf=>java.nio.ByteBuffer
- streambuf=>java.nio.Buffer(抽象,与streambuf相同)
- 字符串流=>java.nio.Channel.newReader(…)+java.nio.Cannel.newWriter(…)
我对stringbuf、streambuf、stringstream、istringstream、ostringstream、iostream、io_base的类层次结构感到满意。。。与2003~2004年发布的Java Nio类(参考Jdk 1.4 Nio)惊人地相同。
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 初始化 stringstream.str( a_value ) 和 stringstream << a_value 之间的区别
- 请帮助我理解streambuf、stringbuf和stringstream之间的区别