StreamReader 与 BinaryReader?

Posted

技术标签:

【中文标题】StreamReader 与 BinaryReader?【英文标题】:StreamReader vs BinaryReader? 【发布时间】:2012-05-08 09:29:24 【问题描述】:

StreamReaderBinaryReader都可以用来从二进制文件中获取数据(例如)

二进制读取器:

   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();
                
            

有什么区别,我应该什么时候使用 which ?

【问题讨论】:

一个适合文本文件,另一个适合二进制文件?正如您在示例代码中所隐瞒的那样。 @Adam Houldsworth utf8 字符串也可以包含二进制数据。 是的,但大概编码为 UTF-8 字符串...所以本质上是文本。 @AdamHouldsworth 不是 utf8 字符串可以保存任何信息吗? @RoyiNamir “utf8 字符串可以包含二进制数据” - 你认为“二进制数据”是什么? 【参考方案1】:

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

嗯,StreamReader 可用于从文本的二进制表示中获取文本数据。

BinaryReader 可用于获取任意二进制数据。如果其中一些二进制数据恰好是文本的表示,那很好 - 但不一定是。

底线:

如果您的全部数据是文本数据的直接二进制编码,请使用StreamReader。 如果您从根本上获得了 二进制 数据,而这些数据可能恰好在文本中有 一些 部分,请使用 BinaryReader

例如,您不会尝试读取带有StreamReader 的JPEG 文件。

【讨论】:

@RoyiNamir:不,字符串就是文本。甚至没有“UTF-8 字符串”之类的东西——有一个字符串的 UTF-8 二进制表示...字符串包含文本数据——它是一个字符序列。然后,您可以使用编码(例如 UTF-8)将其转换为二进制表示。请阅读csharpindepth.com/Articles/General/Unicode.aspx @Nudier:不,StreamReader 和 BinaryReader 都不是从 Stream 派生的。 绝对使用 StreamReader 和使用 BinaryReader 之间存在巨大差异。 @RoyiNamir:“二进制字符”在术语上是矛盾的。这就像在谈论“浮点整数”。您不得将任意二进制数据(例如 JPEG 文件)作为文本读取。您丢失信息。 @RoyiNamir:在这两种情况下,您是否都以幼稚的方式将其转换为文本?如果是这样,您可能在这两种情况下都会丢失数据,并且可能会一直丢失。只是不要这样做 - 二进制数据不是文本,所以不要试图假装它是。如果确实需要用文本表示任意二进制数据,请使用 base64。 @RoyiNamir:Unicode 几乎可以表示您想提及的任何 字符。但这里的关键词是character——而不是byte。字符用于文本。如果没有文字,就没有字符。

以上是关于StreamReader 与 BinaryReader?的主要内容,如果未能解决你的问题,请参考以下文章

逐行读取txt文件,使用Linq与StreamReader的Readline方法

streamReader.ReadToEndAsync() 改变消息内容

按行读取文本或字符串到数组效率测试:StreamReader与Split函数对比

StreamReader缓冲GZIP的流式HTTP?

(12)C#传智:File类,泛型,字典,FileStream,StreamReader,多态

c#streamreader 有的机器乱码有的不乱吗