2012-04-27 29 views
27

Tanto StreamReader y BinaryReader se puede utilizar para obtener datos de archivo binario (por ejemplo)StreamReader 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:

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

¿Cuál es la diferencia y cuando debería usar cual?

+2

¿Uno es adecuado para archivos de texto, el otro para archivos binarios? Como incluso se le escapa en su código de muestra. –

+0

@Adam Houldsworth cadena utf8 también puede contener datos binarios. –

+1

Sí, pero presumiblemente codificado como una cadena UTF-8 ... así que en esencia sería texto. –

Respuesta

62

Tanto StreamReader y BinaryReader se pueden utilizar para obtener datos de archivo binario

Bueno, StreamReader se puede utilizar para obtener datos de texto a partir de una representación binaria de texto.

BinaryReader se puede utilizar para obtener datos binarios arbitrarios. Si algunos de esos datos binarios resultan ser una representación de texto, está bien, pero no tiene por qué ser así.

En pocas palabras:

  • Si la totalidad de sus datos es una codificación binaria directa de datos de texto, utilice StreamReader.
  • Si usted tiene fundamentalmente datos binarios que pueden pasar a tener algunos porciones de texto, utilice BinaryReader

Así, por ejemplo, que no podría tratar de leer un archivo JPEG con StreamReader.

+0

pero una cadena utf8 puede contener incluso datos binarios ... ¿así que ...? –

+0

isnt a utf8 string puede contener cualquier información? –

+4

@RoyiNamir: No, una cadena es texto. Ni siquiera hay una "cadena UTF-8" - hay una representación binaria * UTF-8 * de una cadena ... Una cadena contiene datos de texto, es una secuencia de caracteres. A continuación, conviértalo en una representación binaria utilizando una codificación, como UTF-8. Lea http://csharpindepth.com/Articles/General/Unicode.aspx –

Cuestiones relacionadas