FileStream与/差异StreamWriter?

时间:2011-02-10 22:54:29

标签: c# filestream streamwriter

问题:

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

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

是否可以将这两者合二为一?

6 个答案:

答案 0 :(得分:90)

  

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

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

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

  

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

如果您拥有byte[]数据,则使用裸FileStream。如果要编写文本,可以添加StreamWriter。使用Formatter或Serializer编写更复杂的数据。

  

是否可以将这两者合二为一?

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

答案 1 :(得分:18)

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

答案 2 :(得分:14)

FileStream明确用于工作文件。

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

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

答案 3 :(得分:7)

好吧,来自FileStream的MSDN:

  

在文件周围显示Stream,支持同步和异步读写操作。

StreamWriter的MSDN:

  

实现TextWriter,以便以特定编码将字符写入流中。

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

StreamWriter页继续添加:

  

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

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

答案 4 :(得分:5)

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

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

StreamWriter是Stream的包装器,它简化了使用该流输出纯文本的过程。它公开了接受字符串而不是字节的方法,并对字节数组执行必要的转换。还有其他作家;您使用的另一个主要是XmlTextWriter,它有助于以XML格式编写数据。写作者的读者对应者同样包装了一个Stream并且有助于将数据恢复出去。

答案 5 :(得分:0)

一个关键的区别(除了上面的注释),可能是FileStream支持随机磁盘加速读取和写入任何指定的FileStream.Position。对于大型文件修改,这可能是非常宝贵的。