为什么StreamReader返回字符串而不是字节数组

时间:2017-03-29 03:47:31

标签: c# .net character-encoding stream

两个相关问题:

  1. 为什么他们选择从string而不是StreamReader.ReadToEnd()返回byte[]
  2. 我知道我可以使用System.Text.Encoding转换它,但我应该使用哪种编码? UTF8,UTF7,ASCII还是Unicode?我正在处理二进制文件。
  3. 注意:我被要求澄清。只是 stream 这个词给人一种字节级的印象......好吧...... stream 的数据(想想网络流,文件流,缓冲区,没有它们应该是一个char型概念)。正如乔尔在答案中正确指出的那样,这更像是一个命名问题而不是其他任何问题。

2 个答案:

答案 0 :(得分:3)

“为什么”这些问题很少成为Stack Overflow的优质素材,因为只有能够真正回答它们的人才是产品设计委员会的人。

然而,在这种情况下,我们至少可以通过指向StreamReader documentation给你一个很好的指示,你会在哪里找到它:

  

实现一个TextReader,它从特定编码的字节流中读取字符。

因此,我们看到,使用文本而不是字节是StreamReader的全部内容。也许你会问为什么它被命名为“StreamReader”而不是“TextStreamReader”,但后来我不得不把你推荐回我的第一句话。

至于获取字节数组......这取决于你想要做什么。 .Net使用Unicode作为字符串,但底层流可能有所不同,无论您打算如何处理这些数据,都可能需要完全不同的编码。

但是,在这种情况下,您有二进制文件,并且需要Byte[]。不要乱用流,而只看File.ReadAllBytes()。如果您必须处理流,您可能还需要BinaryReader

答案 1 :(得分:1)

您有许多StreamReader的替代品,主要用于读取字符数据。如果您正在读取二进制文件数据,那么更好的选择是使用FileStream.Read。它以字节数组的形式返回数据。

根据我的基准测试,它比BinaryReaderFile.ReadAllBytes快。但是,File.ReadAllBytes更容易使用。