如何跟踪写入std :: 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

使用ostream tellp()方法。

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

您可能还可以编写发送给另一个ostream并计数发射字符的自定义ostream。我希望找到一种虚拟方法来覆盖Ostream仅写字符,但是我没有找到它:(您可以重新使用弦乐代码并替换缓冲区写入为其他Ostream。string-stream.cc大约500行。,所以这还不是很糟糕。

最新更新