输入输出流为什么叫做流? 难道它本身有特性?

就C++来讲,scanf函数和它又有什么不同?为什么就cin和cout能被称作是"流"而scanf这样的就没人叫它流?
仅仅是因为cin它们继承自一个流对象?

流是根据连续传输特性命名的一种信息序列,也可以认为是一种抽象的数据结构。流不能直接被随机读写,而可以顺序读写,因此如果要取得其中的数据需要的时间开销和数据的位置相关。作为对比,一般的连续线性表(例如储存在内存中的数组)可以根据下标作为索引在常数时间复杂度内定位至其中的任一位置进行读写(随机读写)。流可以用来抽象低速存储介质(不支持随机读写)中的信息,例如硬盘和网络文件等。
在C语言中,流被实现为标准库实现的内部结构,通过文件指针(FILE*对象)可以表示流(外存储器中的文件也被作为流来进行读写),提供平台无关的操作方式。存在三种标准的流:标准输入流stdin、标准输出流stdout和标准错误输出流stderr。默认情况(不经过重定向)下,标准输入流在控制台程序中映射为键盘输入,后两者一般为控制台输出。scanf、printf等标准输入/输出函数专门对stdin和stdout进行操作,在库的底层往往和对应函数的流操作版本共用实现。例如scanf("%d", &i);相当于fscanf(stdin, "%d", &i);——也就是scanf等也是对流进行操作,只不过这里的流被隐含地限定为stdin/stdout。另外一个重点是提供了缓冲机制(标准错误输出流是无缓冲的),可以显著提升读写效率(如果直接使用平台相关的外部API、系统调用等,为了操作硬件可能需要频繁切换操作系统状态,效率很低)。同时由于缓冲的存在,顺序读写进行定位时的性能更加稳定(例如fseek之类对程序员而言基本是O(1),不管定位到哪里,时间开销基本没什么区别)。
C++继承了C语言中对流的操作方式,同时在标准库中(包含<iostream>、<fstream>等)对流操作进行另一个角度的封装。以上三个标准流的对应对象为cin、cout和cerr。对于这些对象的基本操作效果(也是它们存在的意义)在本质上和C是相同的(缓冲实现等细节有所区别;另外cin和cout是有缓冲的,cerr还是无缓冲的),只是使用的语言特性不同——例如可以根据参数类型在编译期确定输出的格式,配合运算符重载的operator<<和operator>>,而不需要在运行期解析格式控制字符串;使用cout<<endl而不用fflush(stdout)等等。
====
[原创回答团]

参考资料:原创

来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-25
因为C++中,把他们看做流,更具有普遍的通用性也是C++的一个特点之一,你这里看到的是狭义的流,比如打印文件,我可以把打印机看做一个屏幕一样,让打印内容流进去,在C++的流中,可以看做数据在各种对象中流来流去,是一种思想。
第2个回答  2010-08-25
这个流不是水流动的流,这里只是一个词,其实是文件共享的问题,一个文件共享,然后一个程序写,另一个程序读,这样就形成了通信,输入输出就是这样。
第3个回答  2010-08-25
它就是这么个叫法,<< 这个符号就像水流,所以这么叫,其中只是格式不同,其他没有区别

输入输出流为什么叫做流? 难道它本身有特性?
流是根据连续传输特性命名的一种信息序列,也可以认为是一种抽象的数据结构。流不能直接被随机读写,而可以顺序读写,因此如果要取得其中的数据需要的时间开销和数据的位置相关。作为对比,一般的连续线性表(例如储存在内存中的数组)可以根据下标作为索引在常数时间复杂度内定位至其中的任一位置进行读写(...

InputStream 输入流为什么是读,而不是写
input 和out 是对计算机本人而言的,input是往计算机中输入,对计算机而言就是读,反之,out 就是从计算机往外输出 就是写

调压器的输入电流和输出电流为什么还是一样,在电压调低后?难道是调压...
调压器输入端接到电源,输出端接到负载,在输出端电压调低后,输出的负载电流肯定大于输入端电源电流的。所谓输入和输出电流一样是指输入端和输出端在输出无论调到什么电压程度其输出最大允许电流和输入最大允许电流是一样的。因为调压器是一个线圈,线径处处相同。

bat语句中“1>&2”是什么意思?
nul代表的是“空设备”,是一个不存在的设备,将输出流重定向到空设备就相当于屏蔽掉了一样。而如果从空设备中读取输入,自然是读不到东西的,但的确是输入了,这也就是“set \/p var=<nul”中“<nul”相当于回车但不换行的原因。第二节 好了,说到这里,相信大家对重定向输出和输入又有了进一步的了解,关于重...

我想学好模电,求大神解答问题,有关放大电路三极管的问题,我都快被它...
首先,输入输出回路的判断:拿第一个图来说吧,基极输入,集电极输出,发射极公共(所以叫共射),输入回路就包括基极和发射极,输出回路包括集电极和发射极。(还有种判断方法,就是化成交流等效电路,模电书上有,看下图就能分辨输入输出回路了)。正偏反偏的判断:主要看电位差,第一个图里,发射极...

三极管信号输入输出问题
1. 首先 双极型三极管 BJT 是一种 跨导放大器 就是 输出电流 Io = gm × V in 真正输入是电压,解释如下 因为 三极管是PN结的组合 PN结电流: I = Is * EXP ( V结\/Vt - 1)Is是PN结饱和电流,他与PN结的工艺有关, V结 是加在PN结上的电压。可见既然是PN结, 那么对PN结加上一个电压...

矢量控制PI控制器的输入是电流,输出怎么就成电压了,难道不是输出经变换...
这么高深,还有Park变换(不用管它,它就是进行一个维度的变换)!输入的电流只是作为spwm的控制信号,而SPWM去控制逆变器的输出电压。如果你感觉要有个变换才能理解,可以将采集的电流到输出电压整个过程就看成是一个电流到电压的变换过程!

变压器为什么输出电流决定输入电流
以上是假定变压器理想状态,实际上变压器本身存在损耗,也就是电磁转换过程有能量损失,变压器绕组内的电阻r产生一定的压降Ut,这个压降Ut=I*r与电流成正比。第二个问题,输送功率基本上不会保持不变,在频率恒定时,输送功率由负荷决定,且与输送回路的阻抗和导纳有关。

UML建模(二)--流程图
它包含了几个关键词: 谁,什么时候,在什么条件下,做了什么事情,输入什么,输出什么,输出给谁…… 与系统流程不同,业务流程更关注于业务本身如何运作,讲的是业务故事,包含的是业务规则。而系统流程则是满足业务流程,实现部分流程或全部流程的信息化和系统化。 所以业务流程是所有环节的前置条件——软件需求分析,信息...

运算放大器的输入与输出之间接电容是为了什么?
在接近f的频段输出电压不会下降。而当输入频率远高于 f时。电容C引入的是一个负反馈。减小了放大倍数。输出电压急剧下降。所以就解释了滤除高频干扰,限制放大器的带宽作用的阐述。既然反向端输入的是交流信号。他的频率应该有一定的范围。根据上面阐述的特性。可以通过f=1\/2paiRC计算C的值。如果楼主还是不清楚。

相似回答