两个相关问题:
string
而不是StreamReader.ReadToEnd()
返回byte[]
? System.Text.Encoding
转换它,但我应该使用哪种编码? UTF8,UTF7,ASCII还是Unicode?我正在处理二进制文件。注意:我被要求澄清。只是 stream 这个词给人一种字节级的印象......好吧...... stream 的数据(想想网络流,文件流,缓冲区,没有它们应该是一个char型概念)。正如乔尔在答案中正确指出的那样,这更像是一个命名问题而不是其他任何问题。
答案 0 :(得分:3)
“为什么”这些问题很少成为Stack Overflow的优质素材,因为只有能够真正回答它们的人才是产品设计委员会的人。
然而,在这种情况下,我们至少可以通过指向StreamReader documentation给你一个很好的指示,你会在哪里找到它:
实现一个TextReader,它从特定编码的字节流中读取字符。
因此,我们看到,使用文本而不是字节是StreamReader的全部内容。也许你会问为什么它被命名为“StreamReader”而不是“TextStreamReader”,但后来我不得不把你推荐回我的第一句话。
至于获取字节数组......这取决于你想要做什么。 .Net使用Unicode
作为字符串,但底层流可能有所不同,无论您打算如何处理这些数据,都可能需要完全不同的编码。
但是,在这种情况下,您有二进制文件,并且需要Byte[]
。不要乱用流,而只看File.ReadAllBytes()
。如果您必须处理流,您可能还需要BinaryReader
。
答案 1 :(得分:1)
您有许多StreamReader的替代品,主要用于读取字符数据。如果您正在读取二进制文件数据,那么更好的选择是使用FileStream.Read。它以字节数组的形式返回数据。
根据我的基准测试,它比BinaryReader和File.ReadAllBytes快。但是,File.ReadAllBytes更容易使用。