从 istream 快速控制复制到 ostream

21

我必须从istream复制多个字节到ostream,有两种方法可以执行此操作。

myostream << myistream.rdbuf();

copy( istreambuf_iterator<char>(myistream),
      istreambuf_iterator<char>(),
      ostreambuf_iterator<char>(myostream)
);

我发现rdbuf版本的速度至少是copy的两倍。
我还没有找到只复制100字节的方法,但由于要复制的大小可能会相当大,如果可能的话我想使用rdbuf版本。

如何将这些副本限制在给定的字节数内?

1个回答

11

你能使用0x吗?如果可以的话,那么你可以使用copy_n:

copy_n( istreambuf_iterator<char>(myistream),
        100,
        ostreambuf_iterator<char>(myostream)
);

编辑1:

我知道你可能在寻找一个库的解决方案,而且你可能已经自己想到了这个问题的解决方法。但是,如果你还没有想到像这样的解决方案,那么这就是我会做的(如果我没有copy_n函数):

void stream_copy_n(std::istream & in, std::size_t count, std::ostream & out)
{
    const std::size_t buffer_size = 4096;
    char buffer[buffer_size];
    while(count > buffer_size)
    {
        in.read(buffer, buffer_size);
        out.write(buffer, buffer_size);
        count -= buffer_size;
    }

    in.read(buffer, count);
    out.write(buffer, count);
}

我希望我能够,但目前不行! - Arkaitz Jimenez
3
请注意 copy_n 变种会复制 n 个项目,但仅从输入流中删除 n-1 个项目!http://coliru.stacked-crooked.com/a/5bf783061b54bc35 - typ1232

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接