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