如何跟踪写入std :: ostream对象的字节数?

时间:2016-12-15 20:45:09

标签: c++ iostream ostream

我想将一堆数据写入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_integersome_other_arbitrary_object的问题。

1 个答案:

答案 0 :(得分:0)

使用ostream tellp()方法。

请注意,如果提供的ostream不支持职位,则可能会失败。在这种情况下,您可以创建一个临时ostringstream来格式化数据,然后提取string,获取其长度并将其发送到输入ostream

您也可以编写一个自定义ostream,发送给另一个ostream并计算发出的字符数。我希望找到一个虚拟方法来覆盖ostream中只写字符,但我没有找到它:(你可以重新使用stringstream代码并将缓冲区写入替换为写入其他ostream。string-stream.cc是大约500行,所以这并不坏。