【发布时间】:2017-05-27 10:15:30
【问题描述】:
假设ifstream 作为源,ofstream 作为目标,从源中的streampos(offset) 开始复制 N 个字节的最快方法是什么?
编辑
我想到的最简单的方法是使用简单的缓冲区:
char *buf = new char[N];
is.seekg(offset);
is.read(buf, N);
os.write(buf, N);
delete buf;
或更小的固定大小的缓冲区:
char buf[BUF_SIZE];
is.seekg(offset);
while (N > 0) {
int n = min(BUF_SIZE, N);
is.read(buf, n);
os.write(buf, n);
N -= n;
}
我想知道有什么比这更快或更高效。
【问题讨论】:
-
请提供您目前尝试过的解决方案?并解释为什么没有工作。
-
最快的方法取决于很多细节。您应该尝试几种不同的方法并对您感兴趣的系统进行基准测试。
-
@KamilKoczurek 在这种情况下,
InputIterator first和OutputIterator result是什么? -
std::istream_iterator
(in) 和 std::ostream_iterator (out)。 -
注意应该是
delete [] buf,在栈上分配缓冲区的buf可能会更快...