I/O (输入/输出)流类库提供对象之间的数据交互服务。
流类库预定义了一批流对象,连接常用的外部设备。
可以定义所需的I/O流对象,使用流库提供的工作方式实现数据传输。
程序中,对数据的输入/输出是以字节流实现的。
应用程序对字节序列作出各种数据解释。
I/O系统的任务就是在内存和外部设备之间稳定可靠地传输数据和解释数据。
流类对象可以建立和删除,可以从流中获取数据和向流添加数。
流的概念
➢输入/输出是一种基本的数据传递操作,它可以理解为字符序列在计算机内存与外设之间的流动。
➢数据从一个对象到另一个对象的流动抽象为流(stream),
➢实现设备之间交换信息的类称为流类。
➢按面向对象方法组织的多个流类及其类层次集合构成了I/O流类库,简称为流库。
➢流库中的每一个流类都定义了一种设备之间的信息交换方式,按信息流动方向的不同,可以分为输入/输出流。
➢与输入设备(如键盘)相联系的流称为输入流。
➢与输出设备(如屏幕)相联系的流称为输出流。
➢与输入输出设备相联系的流称为输入输出流。
流的种类
文本流(Text Stream) 是一串ASCII字符:
如数字12在文本流中的表示方法为1与2的ASCII码31H与32H。
源程序文件和文本文件在传送时均采用文本流。
通常,文本流在不同的设备之间传送时,可能要作一- 些变换(windows操作系统需要,而在linux下不需要变换),如将换行字符’\n’变换成回车换行两个字符“\r\n”( 创建文本文件时), 或作相反的操作(将文本文件的内容读入内存中时)。
二进制流( Binary Stream ):
是由一串二进制数组成,
如数字12在二进制流中的表示方式为0001100。
二进制流是将数据以二进制形式存放的,这种流与设备上的输入输出一
一对应,在数据传送时不需作任何变换。
缓冲流与非缓冲流
对于非缓冲流,一旦数据送入流中,立即进行处理。
对于缓冲流,只有当缓冲区满时,或当前送入的数据为新的一行字符时,系统才对流中的数据进行处理(称为刷新)。
引入缓冲的主要目的是为了提高系统的效率,因为输入/输出设备的速度要比CPU慢得多,频繁地与外设交换信息必将占用大量的CPU时间,从而降低程序的运行速度。使用缓冲后,CPU只要从缓冲区中取数据或者把数据输入缓冲区,而不要等待设备具体输入/输出操作完成。
通常情况下使用缓冲流,但对于某些特殊场合,也可使用非缓冲流。