stringstream.read() 是否消耗流
Does stringstream.read() consume the stream?
我无法从文档中看出std::stringstream.read()
是如何工作的。它是否消耗流?
换句话说:
std::stringstream ss;
char buffer[6];
ss << "Hello world!";
ss.read(buffer, 6);
std::cout << ss.str(); // Is this "Hello world!" or just "world!"
成员std::istream::read()
为它返回的字符数推进流位置。我想,这就是你所说的"消耗流"的意思。从ss
中读取6个字符后,下一个读取的字符将是w
。
流的内部缓冲区仍然是整个字符串,即str()
的结果不受读取位置的影响:std::stringstream::str()
返回所有字符。在27.8.2.3 [stringbuf.members]第1段中,它说:
basic_string<charT,traits,Allocator> str() const;
返回:一个basic_string对象,其内容等于basic_stringbuf基础字符序列。
该段落继续描述基础字符序列是什么,但它相当于:输入模式下的整个原始字符串和输出模式下的原始字符加上其他写入字符。
是的,它消耗流。
但是 str() 函数在缓冲区中返回完整的字符串。
您可以使用 ss.rdbuf()->in_avail() 在读取/>>操作后获取可用的数据大小:
ss << "Hello world!";
ss.read(buffer, 6);
std::cout << ss.rdbuf()->in_avail(); // 6 characters available ("world!").
read
是一个未成形的输入函数;它将指定数量的字符从内部缓冲区提取到您提供的字节数组中。在这种情况下,它将缓冲区中的 6 个字符提取到 buffer
中。所以buffer
的内容将是"Hello "
.
write
则相反. write
会将提供的字节数组中指定数量的字符插入到输出流的内部缓冲区中。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 使用 ImageIO.read() 生成的图像是否仍然使用传递给它的相同内存?
- 对同一文件使用 .read 的次数是否有限制?
- C++ istream:gcount() 是否总是在 read() 之后设置,即使它失败了
- 是否可以将"Read from file"函数分配给变量?
- stringstream.read() 是否消耗流
- 是否可以使用 std::string 进行 read()
- 是否可以C++创建像 read() 这样的通用函数<type>?
- std::wfstream是否可以通过引用传递,以及我是否能够正确使用write()和read()
- 在read()之前检查boost::asio缓冲区数据是否存在
- 有没有办法验证 read() 方法是否对文件进行了完美的读取