[英]How can I keep track of the number of bytes written to an std::ostream object?
我想将一堆数据写入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
字节数,然后将stringstream
流写入流,但这需要额外的时间和内存。
我还意识到,如果我要写入的所有数据都是预先存在的字符串,那么就不会有问题。 问题是some_integer
和some_other_arbitrary_object
。
使用ostream
tellp()
方法。
请注意,如果提供的ostream
不支持职位,这可能会失败。 在这种情况下,您可以创建一个临时的ostringstream
来格式化数据,然后提取该string
,获取其长度并将其发送到输入ostream
。
您可能还可以编写一个自定义的ostream
,将其发送到另一个ostream
并计算发出的字符。 我期望找到一个在ostream中重写的虚拟方法以仅写入字符,但我没有找到它:(您可以重复使用stringstream代码,并替换写入其他ostream的写缓冲区string-stream.cc
是大约500行长,所以这还不错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.