第5章 输入输出
5.1 流
流来源于英文单词“stream”,这里应该理解为一个名词。无论是从汉语还是英语,我们马上就能联想到水流,就像一条小溪,当需要取水的时候,从小溪里取一瓢,我们不知道水从何处来;当需要倒水的时候,直接把水倒入小溪中,我们也不知道水最终流向了那里。有点徐志摩了!这毕竟是一本技术书籍,不是诗集,所以下面我给出相对严谨一点的定义。
首先,你不能让真的水流流进你的计算机里,否则你会有大麻烦。所以第一步我们把水流转换成字节流,也就是说,这条小溪里面流淌的不是一个个水分子,而是一个个字节。
这样,流就变成了一种特殊的数据结构,它是动态和线性的。动态是指数据的内容和时间相关,比如在某个时刻你从一个流里读到的是一个字节,下一次你再读就不是原来的字节了。线性是指流只在纵向上有长度,在横向上没有宽度,具体地说,就是每次流只能读入一个字节,不可能一次同时并行读两个字节。举例来说,你在阅读这本书的时候,你实际上就是在操作一个流,因为你在阅读的时候,必然是按照从左到右的顺序来逐字阅读的。
那么说到底,流是什么呢?流主要是逻辑上的概念,是输入输出的一种高度抽象。流产生或消耗数据,产生数据的叫输入流,消耗数据的叫输出流。至于怎么产生,又怎么消耗,根据每种输入、输出物理设备的不同而不同,这与流无关。C 语言对各种输入和输出设备一视同仁,以一个“流”来抽象代表所有的设备。这种抽象的合理之处就在于,C 语言中输入输