从istream到ostream的快速控制复制

时间:2010-10-31 16:32:20

标签: c++ iterator stream iostream

我必须将几个字节从istream复制到ostream,我知道有两种方法可以执行此复制。

myostream << myistream.rdbuf();

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

我发现rdbuf版本的速度至少是copy的两倍 我还没有找到复制方式,比方说100字节,但由于要复制的大小可能很大,我希望能够使用rdbuf版本,如果可行的话。

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

1 个答案:

答案 0 :(得分: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);
}