Как продвигаться через данные из признака std::io::Read, когда Seek не реализован?
каков наилучший способ чтения из типа, реализующего std::io::Read
черта, когда содержимое вывода не важно?
возможные варианты, которые я вижу:
- чтение одиночных байтов в цикле.
- выделить огромные вектор и читать в этом.
- что-то между... чтение в буфер фиксированного размера в цикле.
первые 2 варианта не подходят, третий Хорошо, но неудобно.
обеспечивает ли ржавчина удобный способ достичь этого?
1 ответов
можно использовать 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();
(площадка)
здесь, мы также должны использовать by_ref()
для того, чтобы иметь возможность по-прежнему использовать после этого файл.