【问题标题】:FileStream vs StreamReader and StreamWriter - what's the difference? [duplicate]FileStream vs StreamReader 和 StreamWriter - 有什么区别? [复制]
【发布时间】:2021-06-18 22:54:30
【问题描述】:

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

【问题讨论】:

  • StreamReaderStreamWriter 可以在内部使用 FileStream,具体取决于您如何构造它们。不同之处在于专用类仅用于处理文本文件。
  • 这能回答你的问题吗? FileStream vs/differences StreamWriter?

标签: c# file filestream streamreader streamwriter


【解决方案1】:

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

在处理文本时,我们必须考虑文本编码。为具有不同字符集的不同文化创建了许多文本编码。如今,一个常见的是 UTF8(一种 unicode 形式)。文本编码是我们告诉计算机将文本表示为字节的方式。使用 UTF8,字母“A”将由一个字节表示,但日语平假名“あ”将是 3 个字节。编码使我们能够正确地读写文本。您可以阅读更多关于 here 的信息(以防链接中断:WaybackMachine link)。

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

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

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

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

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

相比之下,FileStream 只有 ReadWrite 之类的方法,它们可以处理字节。

【讨论】:

    【解决方案2】:

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

    A StreamWriter : TextWriter,是一个流装饰器。 TextWriter 将字符串或字符等文本数据编码为 byte[],然后将其写入链接的 Stream。

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

    作者:Henk

    【讨论】:

      猜你喜欢
      • 2010-11-03
      • 1970-01-01
      • 2014-05-20
      • 2011-02-22
      • 2015-11-23
      • 2013-02-13
      • 2011-04-26
      • 2016-09-24
      相关资源
      最近更新 更多