2017-02-15 16 views
2

出力の内容が重要でない場合、std::io::Readを実装する「読み取り」タイプから読み取る最も良い方法は何ですか?'Seek'が実装されていない場合、 'std :: io :: Read'特性からデータを進めるには?

可能なオプションは以下のとおりです。

  • は、ループ内で、単一のバイトを読みます。
  • 潜在的に巨大なベクトルをに割り当てて読み込みます。
  • 中間のもの... ループ内の固定サイズのバッファに読み込まれます

最初の2つのオプションは理想的ではないと思われます.3番目のオプションは問題ありませんが、不便です。

これを達成するためにRustは便利な方法を提供しますか?あなたが特定のバイト数破棄するio::copy()Read::take()io::sink()を使用することができます

答えて

5

:ここ

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()を使用する必要がありますその後のファイル。

関連する問題