配置流以寫入特定緩衝區
使用stringstream 類別將資料寫入現有緩衝區時,重要的是要避免過多複製。預設機制涉及將訊息從流複製到臨時字串對象,這可能效率低。
原始方法及其局限性
最初進行了嘗試使用 rdbuf()->pubsetbuf() 方法將流輸出重定向到所需的緩衝區。然而,這種方法在 Visual Studio 2008 實作中被證明是無效的。
自訂 Streambuf 實作
一個可行的替代方案是建立一個自訂 std::streambuf類別來初始化其引用提供的緩衝區的內部指標:
template <typename char_type> struct ostreambuf : public std::basic_streambuf<char_type, std::char_traits<char_type>> { ostreambuf(char_type* buffer, std::streamsize bufferLength) { setp(buffer, buffer + bufferLength); } };
修訂後的程式碼使用自訂Streambuf
使用自訂的ostreambuf類型,程式碼重寫如下:
void FillBuffer(char* buffer, unsigned int size) { ostreambuf<char> ostreamBuffer(buffer, size); std::ostream messageStream(&ostreamBuffer); messageStream << "Hello" << std::endl; messageStream << "World!" << std::endl; }
現在,資料直接寫入外部緩衝區,無需進行不必要的複製。這種方法在使用緩衝區時提供了更高的效率和靈活性。
以上是如何使用 C 中的 Stringstream 高效寫入特定緩衝區?的詳細內容。更多資訊請關注PHP中文網其他相關文章!