我想将一堆数据写入 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
。
最佳答案
使用ostream
tellp()
方法。
请注意,如果提供的 ostream
不支持位置,这可能会失败。在这种情况下,您可以创建一个临时 ostringstream
来格式化数据,然后提取 string
、获取其长度并将其发送到输入 ostream
.
您或许还可以编写一个自定义的ostream
,它发送到另一个ostream
并对发出的字符进行计数。我希望找到一个虚拟方法来在 ostream 中重写以仅写入字符,但我没有找到它:( 您可以重新使用 stringstream 代码并将缓冲区写入替换为写入其他 ostream。 string-stream .cc
大约有 500 行长,所以这还不错。
关于c++ - 如何跟踪写入 std::ostream 对象的字节数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41173044/