在不复制的情况下将std::ostringstream写入文件

Writing std::ostringstream to file without copying?

本文关键字:ostringstream 文件 std 复制 情况下      更新时间:2023-10-16

给定一个以输出字符串流为参数的函数:

void Foo(const std::ostringstream& _oss);

是否有任何方法可以在不必调用str()的情况下将流缓冲区写入文件

我想避免复制缓冲区(str()会这样做)。

void Foo(const std::ostringstream& _oss);
{
  std::ofstream f("foo.bin");
  //WANT: write _oss to f without copying the buffer?
}

有一个operator<<()占用流缓冲区:

f << _oss.rdbuf();

然而,缓冲区需要非常大,才能产生明显的差异。通常情况下,写入磁盘将支配执行此操作所需的时间。

请注意,我会避免创建带有前导下划线的标识符。

您不能在不复制的情况下将其写入文件,因为写入文件就是这样做的,它会将其从内存中复制到磁盘上。

当然,如果您想了解这方面的技术,可以使用内存映射文件。