问题
What's the best way to read from a type implementing the std::io::Read
trait when the contents of the output isn't important?
Possible options I see are:
- Read single bytes in a loop.
- Allocate a potentially huge vector and read into that.
- Something in-between... read into a fixed sized buffer in a loop.
The first 2 options don't seem ideal, the third is OK but inconvenient.
Does Rust provide a convenient way to achieve this?
回答1:
You can use io::copy(), Read::take() and io::sink() to discard a specific number of bytes:
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)
Here, we also have to use by_ref() in order to be able to still use the file afterwards.
来源:https://stackoverflow.com/questions/51811064/how-can-i-skip-a-number-of-bytes-from-a-data-source-that-implements-the-read-tra