在此程式設計上下文中,我們的目標是使用標準I 直接將資料寫入現有緩衝區/O 流。讓我們探討如何使用 pubsetbuf() 方法來完成此任務。
streambuf 中的 pubsetbuf() 方法,streambuf 是 C 標準庫中流緩衝區的基類,允許我們為流提供外部分配的緩衝區。然而,在標準函式庫的 Microsoft Visual Studio 2008 實作中,此方法不執行任何緩衝區分配。
要避免此問題,我們可以建立自訂的streambuf實現,初始化其內部指標以指向給定的緩衝區。這是一個完成此操作的模板化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) { // Initialize internal buffer pointers to the provided buffer setp(buffer, buffer + bufferLength); } };
利用我們的自訂Streambuf,我們現在可以修改程式碼以直接寫入外部緩衝區:
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 標準流直接寫入使用者提供的緩衝區?的詳細內容。更多資訊請關注PHP中文網其他相關文章!