码迷,mamicode.com
首页 > 其他好文 > 详细

关于 流(Stream) 的概念理解

时间:2017-08-03 16:52:40      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:读写   ext   对象   位置   控制台   抽象   部分   语言   write   

什么是流,我认为流就是对IO设备的一种抽象。流将各种千差万别的设备统一抽象成一种模型,向用户提供一个统一的编程接口,用户无需了解设备内部细节,就可完成对设备的IO操作,大大简化开发难度。

流这个概念很重要,很大一部分初涉猎编程的人(包括我),犯眼高手低的错误,认为流不就是对控制台,文件的读写操作吗?其实不然,流也是一个非常重要的编程思想,就像面向对象一样,要深刻理解贯彻在脑子里。要具备对 流 足够的理论知识,才能游刃有余的面对各种数据IO问题。

废话少说。

 

c#语言里,所有的流类型 的基类是 Stream。

Stream是以一个抽象类,由它派生的常用类有:

 

MemoryStream:对内存进行读取与写入 

BufferedStream:对缓冲器进行读取/写入 

FileStream:对文件执行读取与写入

 

流作为对IO设备的一种抽象,不仅是对设备数据的一种缓冲容器,自然也应该具备对设备的读写操作,基本方法有:

Read/Write :读写buffer

ReadByte/WriteByte:读写字节

Seek:设置读写位置

由于流的读写操作有功能上的局限性,所以对流有 Reader/Writer,来丰富对流的读写操作。

c#有TextReader/Writer,BinaryReader/Writer,顾名思义分别为字符流读写和字节流读写。

其中TextReader/Writer是一个抽象类,由它派生的有StreamReader/Writer,StringReader/Writer,后者不对流进行读写操作,所以一般常用前者来读写字符流。

BinaryReader/Writer可以直接拿来用。

 

其他:

我觉得 流 更像是用户与设备之间的“数据通道”,是一种数据的中间容器,不一定缓存设备中的所有数据,但可以允许用户访问设备的所有数据。

其实所有的问题来自于:为什么WebResponse的最终返回给用户的是一个stream,而不是string?

一个解释是response流不一定是字符流,也可以是字节流(这一点确实之前太先入为主了,总是认为服务端返回的是一组字符串)

其二是当response流数据量较大时,考虑到性能问题,不可能一下子将所有数据拿回到用户端上,用流来做中间缓冲。

关于 流(Stream) 的概念理解

标签:读写   ext   对象   位置   控制台   抽象   部分   语言   write   

原文地址:http://www.cnblogs.com/kayn/p/7279331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!