2017-12-30 40 views
1

std::io::Filestd::io::BufReaderのutf-8エンコーディングではない場合は、ファイルを1行ずつ読み込むことはできますか?ファイルを(utf-8ではなく)1行ずつ読み込みますか?

私はstd::io::Linesを見て、それがResult<String>を返すので、私は心配 、私が実装している私の同じことを行うが、その代わりにVec<u8>を返すか、私はいくつかの方法でstd::io::BufReaderを再利用することができます独自のBufReader?あなたは自分自身を再実装BufReaderする必要はありません

+0

UTF-8でない場合、どのエンコードがあなたのプログラムに期待していますか? –

+0

@ E_net4 1バイトエンコーディング - windows-1253のようないくつかのウィンドウOSベース – user1244932

答えて

3

、それはあなたがあなたのユースケースread_untilのために必要な正確に方法を提供します。

fn read_until(&mut self, byte: u8, buf: &mut Vec<u8>) -> Result<usize> 

あなたはVec<u8>あなた自身を供給し、ファイルの内容がbyteまで追加されます(0x0AがLFである)。

いくつかの潜在的な落とし穴があります。

  • バッファは、それは以降の呼び出しの間bufをクリアするのはあなた次第です
  • 、LFバイトではなく、CR LFシーケンスだけではなく終了する場合があります。

単純なwhile let Ok(_) = reader.read_until(0x0A as u8, buffer)は、ファイルを簡単に読み込めるようにしてください。

std::io::Linesは、エンコーディングからUTF-8に変換して優れたAPIを提供すると考えられますが、パフォーマンスには問題があります。

関連する問題