使用 pubsetbuf設定標準流的內部緩衝區
問題:
嘗試使用字串流將資料寫入現有緩衝區,程式設計師最初使用複製將流內容傳輸到緩衝區,旨在避免過多的資料複製。隨後,他們嘗試了streambuf::pubsetbuf()來實現這一點,但發現它並沒有修改Visual Studio 2008 C標準函式庫實作下的緩衝區。
答案:
經過進一步調查,很明顯給定庫實現中的 pubsetbuf 方法本質上是一個無操作。要將流配置為寫入特定緩衝區,建議使用自訂 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); } };
此自訂流緩衝區初始化其內部以引用提供的緩衝區。要使用它:
ostreambuf<char> ostreamBuffer(buffer, size); std::ostream messageStream(&ostreamBuffer); messageStream << "Hello" << std::endl; messageStream << "World!" << std::endl;
此方法允許使用 IOStream 庫和 std::ostream 直接寫入外部緩衝區,從而避免初始複製方法中涉及的不必要的複製。
以上是如何使用 C 標準流有效率地寫入預先分配的緩衝區?的詳細內容。更多資訊請關注PHP中文網其他相關文章!