关于 流(Stream) 的概念理解

什么是流,我认为流就是对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流数据量较大时,考虑到性能问题,不可能一下子将所有数据拿回到用户端上,用流来做中间缓冲。

时间: 2024-10-06 13:37:24

关于 流(Stream) 的概念理解的相关文章

了解PHP中Stream(流)的概念与用法

Stream是PHP开发里最容易被忽视的函数系列(SPL系列,Stream系列,pack函数,封装协议)之一,但其是个很有用也很重要的函数.Stream可以翻译为“流”,在Java里,流是一个很重要的概念.三国真人娱乐城 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等.根据流的方向又可以分为输入流和输出流,同时可以在其外围再套上其它流,比如缓冲流,这样就可以得到更多流处理方法. PHP里

深入理解 Java中的 流 (Stream)

首先,流是什么? 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以"流"的方式进行.设备可以是文件,网络,内存等. 流具有方向性,至于是输入流还是输出流则是一个相对的概念,一般以程序为参考,如果数据的流向是程序至设备,我们成为输出流,反之我们称为输入流. 可以将流想象成一个"水流管道",水流就在这管道中形成了,自然就出现了方向的概念. 当程序需要从某个数据源读入数据的时候,就会开启一个输入流,数据源可以是文件.内存或网络等等.

php流stream概念和用法

转载自http://www.nowamagic.net/librarys/veda/detail/2587 <?php class RecursiveFileFilterIterator extends FilterIterator { // 满足条件的扩展名 protected $ext = array('jpg','gif'); /** * 提供 $path 并生成对应的目录迭代器 */ public function __construct($path) { parent::__const

C/C++中关于输入输出缓冲区和流的概念理解

(本文章关于缓冲区概念的理解部分取自:http://developer.51cto.com/art/201107/277186.htm) 首先可以看下快递的寄送过程: 源地址(商家的仓库)——中转地(快递公司的仓库)——目的地(买家) 我们从淘宝商家买衣服,商家通过快递公司把商品送到我们手里的这个过程可以形象的解释下缓存区和流的这个概念. 1, 淘宝商家不会亲自把商品给买家送过来的,因为这样效率太低了,商家会通过快递公司这个中转,然后快递公司再把东西送给买家.淘宝商家就是在键盘上打字,买家就是程

流Stream 文件File 流IO

Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据. Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中. 但本节讲述最基本的和流与 I/O 相关的功能.我们将通过一个个例子来学习这些功能. 读取控

Java流(Stream)、文件(File)和IO

Java流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据. Java为I/O提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中. 但本节讲述最基本的和流与I/O相关的功能.我们将通过一个个例子来学习这些功能. 读取控制台输入 Jav

流与缓冲区的理解

流的概念 流是一个 过程 ,一个 动态 的概念 (可以把流想象成水在水管中流动的过程,想象成商品快递运送的过程.cin和cout就是 执行 流这个过程的人) 流 负责 操作 缓冲区,输入输出流是 操作 的 实现 对于输入,cin负责把输入缓冲区中的内容传递给程序: 对于输出,cout负责把输出缓冲区中的内容传递给屏幕. (cin和cout把缓冲区的数据变成流,然后 搬运 到相应的目的地.cin和cout就是个 搬运工 , 搬运的过程 就是流) 程序 和 流源 或 流目标 之间的桥梁 使得C++程

Java学习记录(补充八:Date类;Java流(Stream),文件(File)和IO)

Date类,Calendar类package Box1; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Random; //Date类 public class DateTest { public static void main(String[] args) { Date

实现HTTPS系列第四弹之【TLS ,SSL等概念理解】

博文说明[前言]: 本文将通过个人口吻介绍TLS ,SSL,PKI等相关知识,在目前时间点[2017年5月21号]下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容. 1.第一弹:实现HTTPS系列第一弹之[http,https,www,web等概念简介] 博文链接:http://watchmen.blog.51cto.com/6091957/1922919 2.第二弹:实现HTTPS系列