FileStream 与 StreamReader 和 StreamWriter - 有什么区别?

FileStream vs StreamReader and StreamWriter - what's the difference?

在处理无法通过 FileStream 完成的文件时,通过 StreamReaderStreamWriter 允许哪些功能,反之亦然?我检查了文档,它们都有读/写选项,包括更高级的选项。那么我应该什么时候使用它们?

A FileStream 是一个流。像所有 Streams 一样,它只处理 byte[] 数据。

A StreamWriter : TextWriter,是一个 Stream-decorator。 TextWriter 将 String 或 char 等文本数据编码为 byte[],然后将其写入链接的 Stream。

当你有 byte[] 数据时,你使用裸 FileStream。当你想写文本时,你添加一个 StreamWriter 。使用 Formatter 或 Serializer 来写入更复杂的数据。

作者:Henk

FileStream 是用于处理本地文件的最低级 Stream 对象。因此,它以二进制(字节)形式处理文件。你可以读那么多字节,或者写那么多字节。

在处理文本时,我们必须考虑文本编码。为具有不同字符集的不同文化创建了许多文本编码。现在最常见的是 UTF8(unicode 的一种形式)。文本编码是我们告诉计算机将文本表示为字节的方式。使用 UTF8,字母“A”将由单个字节表示,但日语平假名“あ”将是 3 个字节。编码使我们能够正确地读写文本。您可以阅读更多相关内容 here (in case the link ever breaks: WaybackMachine link).

StreamReaderStreamWriter 是围绕阅读文本构建的,因此它们为我们处理了编码。一个用于阅读,另一个用于写作。如果您使用接受文件名的构造函数实例化 StreamReaderStreamWriter,它实际上会在内部使用 FileStream

StreamReader 为我们提供了如下方法:

  • ReadLine - 从文件中读取直到找到回车符 return + 换行符 (\r\n) 或只是换行符 (\n),表示一个文件的结尾单行文本,并且 return 是 string.
  • ReadToEnd - 将整个文件内容读入 string.

StreamWriter 为我们提供了如下方法:

  • Write - 可以将单个字符或整个字符串写入文件,但不会终止该行。
  • WriteLineWrite 的作用相同,但它也会结束该行,因此任何后续写入都将转到文件中的下一行。

相比之下,FileStream only has methods like Read and Write,它使用字节。