将std :: ostringstream写入文件而不复制?

时间:2011-06-13 21:09:26

标签: c++ io

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

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

有没有办法将流缓冲区写入文件 WITHOUT 必须调用str()?

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

void Foo(const std::ostringstream& _oss);
{
  std::ofstream f("foo.bin");

  //WANT: write _oss to f without copying the buffer?
}

2 个答案:

答案 0 :(得分:11)

有一个operator<<()获取流缓冲区:

f << _oss.rdbuf();

但是,缓冲区需要非常大才能产生明显的差异。通常,无论如何,写入磁盘将占据所需的时间。

请注意,我会避免使用前导下划线创建标识符。

答案 1 :(得分:0)

如果没有复制,你就无法将其写入文件 - 因为这是写入文件的内容,它会将其从内存中复制到磁盘上。

当然,如果您想获得有关此技术的技术,可以使用内存映射文件。