当Seek没有实现时,如何从std :: io :: Read特征中提取数据?

时间:2017-02-15 07:44:32

标签: io rust

当输出内容不重要时,从实现std::io::Read特征的类型中读取的最佳方法是什么?

我看到的可能选项是:

  • 循环读取单个字节。
  • 分配潜在巨大的向量并阅读。
  • 介于两者之间... 在循环中读入固定大小的缓冲区

前两个选项看起来并不理想,第三个选项可以,但不方便。

Rust是否提供了实现此目的的便捷方式?

1 个答案:

答案 0 :(得分:9)

您可以使用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()才能以后继续使用该文件。