当输出内容不重要时,从实现 std::io::Read
特性的类型中读取的最佳方法是什么?
我看到的可能选项是:
- 循环读取单个字节。
- 分配一个可能很大的向量并读入它。
- 介于两者之间...在循环中读入固定大小的缓冲区。
前两个选项似乎不太理想,第三个还可以但不方便。
Rust 是否提供了一种方便的方法来实现这一点?
最佳答案
您可以使用 io::copy()
, Read::take()
和 io::sink()
丢弃特定数量的字节:
let mut file = File::open("foo.txt").unwrap();
// Discard 27 bytes
io::copy(&mut file.by_ref().take(27), &mut io::sink());
// Read the rest
let mut interesting_contents = Vec::new();
file.read_to_end(&mut interesting_contents).unwrap();
( Playground )
在这里,我们还必须使用by_ref()
以便之后仍能使用该文件。
关于io - 未实现 Seek 时如何从 std::io::Read 特性中推进数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42243355/