我必须将几个字节从istream
复制到ostream
,我知道有两种方法可以执行此复制。
myostream << myistream.rdbuf();
和
copy( istreambuf_iterator<char>(myistream),
istreambuf_iterator<char>(),
ostreambuf_iterator<char>(myostream)
);
我发现rdbuf
版本的速度至少是copy
的两倍
我还没有找到复制方式,比方说100字节,但由于要复制的大小可能很大,我希望能够使用rdbuf
版本,如果可行的话。
如何将这些副本限制为给定的字节数?
答案 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);
}