我想将一堆数据写入ostream
对象并返回写入的字节数。例如:
using namespace std;
size_t writeStuffToStream(ostream &stream)
{
stream << some_string << some_integer << some_other_arbitrary_object << endl;
return number_of_bytes_written;
}
有一个明显的解决方法是将所有内容写入stringstream
并从中获取字节数,然后将stringstream
写入流中,但这需要额外的时间和内存。
我也意识到,如果我想写的所有数据都是预先存在的字符串,那么就没有问题了。这是some_integer
和some_other_arbitrary_object
的问题。
答案 0 :(得分:0)
使用ostream
tellp()
方法。
请注意,如果提供的ostream
不支持职位,则可能会失败。在这种情况下,您可以创建一个临时ostringstream
来格式化数据,然后提取string
,获取其长度并将其发送到输入ostream
。
您也可以编写一个自定义ostream
,发送给另一个ostream
并计算发出的字符数。我希望找到一个虚拟方法来覆盖ostream中只写字符,但我没有找到它:(你可以重新使用stringstream代码并将缓冲区写入替换为写入其他ostream。string-stream.cc
是大约500行,所以这并不坏。