2012-04-27 27 views
27

StreamReaderBinaryReaderの両方が(例えば)バイナリファイルからデータを取得するために使用することができますStreamReaderとBinaryReader?

BinaryReader:

using (FileStream fs = File.Open(@"c:\1.bin",FileMode.Open)) 
      { 
        byte[] data = new BinaryReader(fs).ReadBytes((int)fs.Length); 
        Encoding.getstring.... 
      } 

は、StreamReaderを:

using (FileStream fs = File.Open(@"c:\1.bin",FileMode.Open)) 
      { 
       using (StreamReader sr = new StreamReader(fs,Encoding.UTF8)) 
       { 
         var myString=sr.ReadToEnd(); 
       } 
      } 

違いは何ですどちらを使うべきですか?

+2

1つはテキストファイルに適しており、もう1つはバイナリファイルに適していますか?あなたのサンプルコードで逃げている人もいます。 –

+0

@Adam Houldsworth utf8文字列にはバイナリデータも含まれます。 –

+1

はい、おそらくUTF-8文字列としてエンコードされているので、本質的にテキストになります。 –

答えて

62

のStreamReaderとBinaryReaderの両方がバイナリファイル

まあからデータを取得するために使用することができ、StreamReaderは、テキストのバイナリ表現からテキストデータを取得するために使用することができます。

BinaryReaderは、任意のバイナリデータを取得するために使用できます。そのバイナリデータの一部がテキストの表現である場合、それは問題ありませんが、必ずしもそうである必要はありません。

ボトムライン:

  • あなたのデータの全体がテキストデータの単純なバイナリエンコードされた場合は、StreamReaderを使用しています。あなたは基本的にテキストでいくつか部分を持つことが起こるかもしれバイナリデータ、あなたがとJPEGファイルを読み込むしようとしないう例えばのでBinaryReader

を使用するを持っている場合は

  • StreamReader

  • +0

    しかし、utf8の文字列には、バイナリデータでさえも含むことができます。 –

    +0

    utf8文字列は情報を保持できませんか? –

    +4

    @RoyiNamir:いいえ、文字列はテキストです。 「UTF-8文字列」などの文字列もありません。文字列のUTF-8 *バイナリ表現*があります。文字列は文字データを保持します。文字列です。 UTF-8などのエンコーディングを使用してバイナリ表現に変換します。 http://csharpindepth.com/Articles/General/Unicode.aspx –