17.1.1 流和缓冲区
C++程序把输入和输出看作字节流。输入时,程序从输入流中抽取字节;输出时程序将字节插入到输出流中。
对于面向文本的程序,每个字节代表一个字符。故流充当了程序和流源或流目标之间的桥梁,通过使用流,C++程序处理
输出(输入)的方式将独立于其去向(来源)。
- 将流与输入去向的程序关联起来;
- 将流与文件连接起来
或
- 将流与输出去向的文件关联起来;
- 将流与程序连接起来
通过使用缓冲区可以更高效地处理输入和输出。
### 缓冲区:用作中介地内存块,它是将信息从设备传输到程序或从程序传输给设备的临时存储工具。
### 作用:通常,像磁盘驱动器这样地设备以512字节(或更多)地块为单位来传输信息,而程序通常每次只能处理1 个字节的信息。
### 缓冲区帮助匹配这两种不同的信息传输速率:程序—>缓冲区—>设备、设备—>缓冲区—>程序。因此结合缓冲区的机制,
### 使得输入输出更快和更方便。
### 其次,对键盘输入虽然不用担心速率匹配问题(键入速度小于程序的处理速度),但是对键盘进行缓冲可以让用户在将输入
### 传输给程序之前返回并更正。
### ### 由于磁盘等设备执行一个操作时需要大量的硬件操作,所以从内存中读取或写入
### ### 单个字节的速度比从硬盘这些设备上快很多,故采用对于磁盘等设备采用块的方式来处
### ### 理信息,并结合缓冲区的机制,使数据暂存于内存中,让设备与程序的互动变成内存与程序的互动,以达到速率匹配的目的。
刷新缓冲区:
- 输出时,程序首先填满缓冲区,然后把整块数据传输给硬盘,并清空缓冲区,以备下一批输出使用。这被称为刷新缓冲区;
- C++程序通常在用户按下回车键时刷新输入缓冲区;
- 对于屏幕输出,C++程序通常在用户发送换行符时刷新输出缓冲区;
- 程序也可能在其它情况下刷新缓冲区,如输入即将到来时刷新输出缓冲区(取决于实现:与ANSI C一致的C++实现如此工作);