Ark*_*nez 15 c++ iterator iostream stream
我必须将几个字节从a复制istream到a ostream,我知道有两种方法可以执行此复制.
myostream << myistream.rdbuf();
Run Code Online (Sandbox Code Playgroud)
和
copy( istreambuf_iterator<char>(myistream),
istreambuf_iterator<char>(),
ostreambuf_iterator<char>(myostream)
);
Run Code Online (Sandbox Code Playgroud)
我发现该rdbuf版本至少是该版本的两倍copy.
我还没有找到复制方式,比方说100个字节,但由于要复制的大小可能会很大,我希望能够使用该rdbuf版本,如果可行的话.
如何将这些副本限制为给定的字节数?
Ben*_*ley 11
你能用0x吗?如果是这样,那么你可以使用copy_n:
copy_n( istreambuf_iterator<char>(myistream),
100,
ostreambuf_iterator<char>(myostream)
);
Run Code Online (Sandbox Code Playgroud)
编辑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);
}
Run Code Online (Sandbox Code Playgroud)