FileStream 与/差异 StreamWriter?

Posted

技术标签:

【中文标题】FileStream 与/差异 StreamWriter?【英文标题】:FileStream vs/differences StreamWriter? 【发布时间】:2011-06-25 05:18:30 【问题描述】:

问题:

.Net 中的FileStreamStreamWriter 有什么不同?

你应该在什么上下文中使用它?他们的优缺点是什么?

这两者可以合二为一吗?

【问题讨论】:

【参考方案1】:

dotnet 中的 FileStream 和 StreamWriter 有什么不同?

FileStreamStream。像所有 Streams 一样,它只处理 byte[] 数据。

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

你应该在什么上下文中使用它?他们的优势和劣势是什么?

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

这两者可以合二为一吗?

是的。你总是需要一个 Stream 来创建一个 StreamWriter。辅助方法System.IO.File.CreateText("path") 将组合创建它们,然后您只需 Dispose() 外部编写器。

【讨论】:

另外需要注意的是FileStream 是一种流,专门针对文件定制。流本身使用字节,但是StreamWriter/Reader 将在 any 流上写入/读取文本,而不仅仅是 FileStreams。例如MemoryStreamsNetworkStreams等。【参考方案2】:

FileStream 写入字节,StreamWriter 写入文本。就是这样。

【讨论】:

其实,这不是“全部”……但这是一个正确的区别。【参考方案3】:

FileStream 明确用于工作文件。

StreamWriter 可用于流式传输到任何类型的Stream - 网络套接字、文件等。

ScottGu 在这里很好地解释了不同的 Stream 对象:http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223

【讨论】:

流的优秀参考,虽然它不包括随机访问 R/W 流。尤其是序列化/反序列化信息和非文件流的演示非常有用。 +1【参考方案4】:

它们是用于将信息输出到已知数据源的两个不同级别。

FileStream 是一种 Stream,从概念上讲,它是一种指向某个位置的机制,可以处理传入和/或传出该位置的数据。存在用于读取/写入文件、网络连接、内存、管道、控制台、调试和跟踪侦听器以及一些其他类型的数据源的流。具体来说,存在一个FileStream 来执行对文件系统的读取和写入。大多数流的使用都非常低级,并将数据处理为字节。

StreamWriter 是 Stream 的包装器,可简化使用该流输出纯文本的过程。它公开了接受字符串而不是字节的方法,并执行与字节数组的必要转换。还有其他作家;您将使用的另一个主要方法是XmlTextWriter,它有助于以XML 格式编写数据。也有对应于 Writer 的 Reader,它们类似地包装 Stream 并便于将数据取回。

【讨论】:

【参考方案5】:

嗯,来自 MSDN 的 FileStream

在文件周围公开一个流,支持同步和异步读写操作。

以及StreamWriter 的 MSDN:

实现一个 TextWriter 用于以特定编码将字符写入流。

最明显的区别是FileStream 允许读/写操作,而StreamWriter 是只写的。

StreamWriter页面继续添加:

StreamWriter 专为特定编码的字符输出而设计,而从 Stream 派生的类则专为字节输入和输出而设计。

第二个区别是FileStream 用于字节,而StreamWriter 用于文本。

【讨论】:

【参考方案6】:

一个关键的区别(除了上面的 cmets),可能是FileStream 支持随机磁盘访问读写任何指定的FileStream.Position。对于大型文件修改,这可能是无价的。

【讨论】:

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

FileStream 的 FlushAsync 方法在 .NET Framework 与 .NET Core 行为的不同

FileStream 的 FlushAsync 方法在 .NET Framework 与 .NET Core 行为的不同

FileStream 的 FlushAsync 方法在 .NET Framework 与 .NET Core 行为的不同

FileStream 的 FlushAsync 方法在 .NET Framework 与 .NET Core 行为的不同

FileStream类的使用

对FileStream的几种属性和方法认识