Как продвигаться через данные из признака 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() для того, чтобы иметь возможность по-прежнему использовать после этого файл.