首頁 >後端開發 >C++ >如何使用 C 標準流有效率地寫入預先分配的緩衝區?

如何使用 C 標準流有效率地寫入預先分配的緩衝區?

Patricia Arquette
Patricia Arquette原創
2024-11-28 09:36:11744瀏覽

How Can I Efficiently Write to a Pre-Allocated Buffer Using C   Standard Streams?

使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn