我不得不替换
let mut bo = vec![];
try!(o.read_to_end(&mut bo));
let mut bo = bo.into_iter();
let vs : Vec<_> = (&mut bo).take(BUFFER).collect();
try!(io::stdout().write(&vs));
用这个
let mut bo = vec![];
try!(o.read_to_end(&mut bo));
let mut io = 0;
let next = min(bo.len(), io + BUFFER);
try!(io::stdout().write(&bo[io..next]));
使用切片的速度是将数据复制到Vec
的速度的两倍多。有没有办法在不复制的情况下使用take(n)
?
答案 0 :(得分:1)
Iterator::take
不做任何复制。另一方面,将迭代器收集到向量中,都会分配空间,然后将项目从迭代器移动到集合中。
使用切片是这里最惯用的解决方案。您希望在向量中输出一个连续的字节范围,并且切换到该向量可以为您提供几乎无法查看这些字节的范围。