簡體   English   中英

如何跟蹤寫入std :: ostream對象的字節數?

[英]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_integersome_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM