2012-04-27 15 views
27
Hem StreamReader

ve BinaryReader ikili dosyadan (örneğin) verileri almak için kullanılabilirStreamReader vs BinaryReader?

BinaryReader:

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

StreamReader: fark nedir

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

ve ne zaman kullanmalıyım?

+2

Biri metin dosyaları için, ikili dosyalar için uygundur? Sizin örnek kodunuzda olduğu gibi bile. –

+0

@Adam Houldsworth utf8 dizesi de ikili veri içerebilir. –

+1

Evet, ama muhtemelen bir UTF-8 dizesi olarak kodlanmış ... özünde metin olacaktı. –

cevap

62

StreamReader ve BinaryReader Hem ikili dosya

Eh veri almak için kullanılabilir, StreamReader metnin bir ikili gösteriminden metin verileri almak için kullanılabilir. Rastgele ikili veri almak için

BinaryReader kullanılabilir. Bu ikili verinin bir kısmı metnin bir temsili haline gelirse, bu iyi - ama olması gerekmiyor.

Sonuç: verilerinizin tamamı metin verilerinin basit ikili kodlama ise

  • , StreamReader kullanın. Eğer temelde metinde bazı kısımlara sahiptir yaşanabilir ikili verileri, sen bir JPEG dosyası okumaya çalışmayın olurdu mesela Yani BinaryReader

kullanmak var ise

  • StreamReader.

  • +0

    ama bir utf8 dizgisi içinde ikili veri bile içerebilir .. bu yüzden ...? –

    +0

    bir utf8 dize herhangi bir bilgi tutabilir değil mi? –

    +4

    @RoyiNamir: Hayır, bir dize metindir. "UTF-8 dizgisi" diye bir şey bile yok - bir dizinin UTF-8 * ikili gösterimi * var ... Dize metin verisini tutar - bu bir dizi karakterdir. Daha sonra bunu UTF-8 gibi bir kodlamayı kullanarak bir ikili gösterime dönüştürürsünüz. Bunların tümünü temel sınıf akışından miras aldığını bildiğiniz üzere http://csharpindepth.com/Articles/General/Unicode.aspx –