今天谈谈流,什么是IO流?
流是磁盘或其它外围设备中存储的数据的源点或终点。这是在《C程序设计语言》上的原话。流主要是指一种逻辑上的概念,它提供或存储数据。产生数据的叫输入流,消耗数据的叫输出流。至于怎么产生,又怎么消耗,这是一种物理上的实现,根据每种设备有所不同,但C语言中对它们一视同仁,以一个“流”字来概括它们的特征。作为流的使用者来说,不需要关心太多的细节。体现了计算机的核心思想对复杂的东西抽象化。流的实现保证了它具有它所声明的特性。C语言中对IO流的不同角度有不同的划分。其实这里也有诸多形象的例子,比如设备与文件直接传输过程就像一个房间里放着一块冰。一个房间需要用水。那么最简单的方式,融合它,以水的形式流过去。
按照流向分为: 输入流和输出流
按照数据的表现形式分为 :字节流(二进制,可以处理一切文件,文本,音频等)和字符流文本文件,只能是纯文本,像txt)
文本流的特点是流由文本行组成,每一行有0个或多个字符并以’\n’字符结束,即它是有一定意义的,以某种字符集的字符组成的一个序列。一个文本流,读入与写出时可能会对其内容作更改,因为它是有一定意义的,系统可以识别并在适当时候解释,比如在输出文本流中碰到’\b’时,系统的操作是将输入流中的前一个字符删除,在终端上显示就是在它前面输出的这个字符被删除了;二进制流则完成是由一些“生”的,未经处理的数据组成的,C语言将它们看成由0与1组成的序列来读与写,所以它们的特性是同一系统中把同一二进制流读入与写出,其内容没有任何变化。这里区分了文本流和二进制流可以看出他们有诸多不同的地方的。其实说白了,文本流人家有样式,穿衣服。进cpu洗澡的时候,要有人脱衣服,出来的时候也有人给穿衣服,有人给打扮。而二进制本来就是裸着,出进倒是方便了。文本文件是为人类使用设计的,像你的txt。而二进制的流是计算机使用的。像你编译完的程序。
下面我们以图的形式来区分二进制流和文本流
在IO流里,输入输出分为4步:格式化/解析,缓冲,编码转换和传递。
格式化/解析:在内部数据表示(以字节为单位)与外部数据表示(以字符为单位)之间进行双向转换。例如一个2字节的整数10002,就需要5个字符来表示。
缓冲:用于在格式/解析与传递只加缓存字符序列。对于输出,较短的字符序列格式化之后并不马上输出,而是保存在缓冲区里,待累积到一定规模之后再传递到外部设备。相反,从外部设备读入的大量数据也是先放在缓冲区,然后逐步取出完成输入。默认时,IO流的输入输出都是经过缓冲的,也可以让IO流工作在无缓冲模式下。
编码转换: 是将一种字符表达式转换成另一种字符表达式。如果格式化产生的字符表达式与外部字符表达式不同(输出时),或者外部表达式与IO流能解析的表达式不同(输入时),就必须进行编码转换。如多字节编码与宽字符编码之间的转换等。多数情况下并不需要进行编码转换。
传递:主要是与外部设备进行通信。输出时,传递负责将经过格式化、缓冲即编码转换后的字符序列发送到外部设备;输入时,则负责将外部设备抽取数据,为其后进行的编码转换、缓冲及解析提供字符序列。在我们学习的C语言中也是这个过程。你用一些函数读取文件的时候也是要解析然后放到缓冲区,然后使用。
2016年10月15日13:42:30 张飞online