C#中,关于流的几个疑惑,谢谢!

1、BufferedStream有缓冲区,但是StreamWriter中重载的构造方法也有指定bufferSize的地方。BufferedStream的优势体现在哪里,而... 1、BufferedStream有缓冲区,但是StreamWriter中重载的构造方法也有指定bufferSize的地方。BufferedStream的优势体现在哪里,而且感觉这个类里面也没有什么特别的方法?
2、MemoryStream的构造方法接受的是byte[],StringReader/StringWriter的构造方法接受的是String,TextReader/TextWriter的构造方法啥都没接受(有一个重载的接受IFormatProvider)。
3、请问这几个流是不是不同于其它的流与磁盘进行数据传输,这几个类是不是用于用户和内存之间传输数据?是不是不大常用呢,书上没介绍,需不需要了解一下。
4、常用的流是不是FileStream、StreamReader、StreamWriter、BinaryReader、BinaryWriter?
展开
 我来答
百度网友43dd28b
2013-07-25 · TA获得超过214个赞
知道小有建树答主
回答量:220
采纳率:0%
帮助的人:108万
展开全部
首先来说一下楼主的一个误区
所谓的“流”,指的是Stream,也就是所谓的一个文件区。这个文件区中存储着的信息可以是在内存中,也可以是在硬盘中。流中的数据均以byte型数组去存储。
BufferedStream不是有缓冲区,而是本身就是缓冲区,可以用它来暂时存储其它流中的内容,然后flush进入相应的流。
至于StreamReader、StreamWriter、BinaryReader和BinaryWriter,他们都是流操作器,这些都是为了方便用户往流里写数据用的。StreamReader是标准流读取器,StreamWriter是标准流写入器,BinaryReader是二进制流读取器,BinaryWriter是二进制流写入器。标准流指的是文本文件,而二进制流指的就是二进制文件。
MemoryStream的构造函数完全可以什么都不填。当留空的时候则会产生一个空白的内存流,然后可以通过流操作器向里面写入数据。总的来说MemoryStream还算是常用,不过得看你用来干什么。如果只是单纯的文件操作,那么我可以告诉你,有用的只有FileStream。
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
百度网友ae3233c
2013-07-25 · TA获得超过1175个赞
知道小有建树答主
回答量:1329
采纳率:0%
帮助的人:481万
展开全部
  1. BufferedStream 只是一个纯粹的内存缓冲区, 一般用来结合 File.OpenRead, File.OpenWrite 等进行操作, StreamWriter 本身有默认的(或是构造中指定大小的)缓冲区, 这两者并不冲突. 可以理解为为了简化编程, C# 结合了文件读写类和缓冲类, 产生了 StreamWriter 这样一个方便的东西给程序员用. 但不能因为 StreamWriter 中有缓冲区了就不再提供单独的 BufferedStream 给别的 Stream 用啊. 这没什么可纠结的.

  2. TextReader/TextWriter 只是 StreamReader/StreamWriter 和 StringReader/StringWriter 的抽象基类, 不提供具体的实现. 一般来说, 对 Text 进行操作时, 不是 Stream 就是 String, 将 TextReader/TextWriter 实例化为它的子类就行了, 比如 TextReader reader = new StringReader(...);

  3. 在我个人的理解中, 程序与磁盘的 IO 操作最终都是由操作系统来处理的, 所以在 C# 中不管用什么流去读写磁盘文件, 最终都是读取或写入二进制数据, 没区别. 

    至于常不常用, 这个得看平常都开发什么东西啊. 如果总是开发 ASP.Net 的, 那几乎就没怎么涉及到磁盘IO. 我个人的话, BufferedStream 就没怎么用过, MemoryStream 倒是真比较常用, StringReader 至今没用过, StreamReader 经常会用到.

    在没有实际需求之前, 知道每个类都是干嘛用的就可以了, 在合适的地方用合适的类和方法, 没实现需求之前不需要了解太深入, 因为东西实在太多了.

  4. 这一条基本可以参见第 3 条了, 流这东西, 说复杂也复杂, 因为一开始理解深入不太容易, 说简单也简单, 因为 C# 都已经封装地很容易对各种流进行操作了, 甚至同一种实现, 有时也可以用各种不同的流去操作.

    一般来说, 如果只是对磁盘文件进行普通操作, System.IO.File 命名空间下提供了很多静态的类, 结合 FileStream 和 StreamReader/StreamWriter 就可以了, 再了解一下 MemoryStream 和 byte[] 跟一般流的结合使用, 差不多了.

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式