StreamReader和BinaryReader?

Roy*_*mir 39 .net c# file streamreader binaryreader

双方StreamReaderBinaryReader可以用来从二进制文件中的数据(例如)

二进制读取器:

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

StreamReader:

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

有什么区别,什么时候应该使用哪个?

Jon*_*eet 75

StreamReader和BinaryReader都可用于从二进制文件中获取数据

好吧,StreamReader可以用来从文本的二进制表示中获取文本数据.

BinaryReader可用于获取任意二进制数据.如果某些二进制数据碰巧是文本的表示,那很好 - 但它不一定是.

底线:

  • 如果您的整个数据是文本数据的直接二进制编码,请使用StreamReader.
  • 如果您从根本上获得了可能碰巧在文本中有一些部分的二进制数据,请使用BinaryReader

因此,例如,您不会尝试读取JPEG文件StreamReader.

  • @RoyiNamir:"二进制人物"是一个矛盾.这就像在谈论"浮点整数".你**不能**将任意二进制数据(例如JPEG文件)作为文本读取.你*将*失去信息. (6认同)
  • @RoyiNamir:不,字符串是文本.甚至没有"UTF-8字符串"这样的东西 - 字符串的UTF-8*二进制表示*...字符串保存文本数据 - 它是一系列字符.然后使用编码(例如UTF-8)将其转换为二进制表示.请阅读http://csharpindepth.com/Articles/General/Unicode.aspx (4认同)
  • @RoyiNamir:Unicode几乎可以代表你提到的任何*字符*.但这里的关键词是*character* - not*byte*.字符用于文本.如果你没有文字,你就没有角色. (2认同)