前言
C的IO库对我来说是一个谜一样存在,它经过了很多层的封装,让程序员调用方式变得简单快捷,但也让程序员无法轻易看透IO库的运行方式。在编写mkDB的时候,要用到文件读写,于是打算加深对C的IO库的认知。
简介
IO库也就是Input/Output即输入/输出库,C++在设计输入输出的时候采用了流式思想。所谓流式思想,就是把输入和输出看成一个整体,也就是把输入和输出的内容都保存到一个长串里,然后对这个长串作其他处理。抽象的概念很难让人产生直观的印象,所以建议通过实践去体会理论的精妙处。
组成部分
基础类
基础类只有一个,命名为ios_base。ios_base是所有I/O流类的基类,提供了I/O操作的基础功能,如格式化、错误处理等。它定义了I/O流的状态、格式和位置。IO流库的所有类都基于ios_base类
输入流
- istream
这是输入流的基类,提供了从流中读取数据的方法。istream从ios_base继承而来。
- cin
预定义的标准输入流对象,通常用于从标准输入(键盘)读取数据。
输出流
- ostream
这是输出流的基类,提供了向流中写入数据的方法。ostream也从ios_base继承而来。
- cout
预定义的标准输出流对象,通常用于向标准输出(屏幕)写入数据。
- cerr
预定义的标准错误流对象,通常用于输出错误信息到标准错误输出。
输入/输出流
- iostream
这是一个同时支持输入和输出的流类,从istream和ostream继承而来。
- stringstream
这是一个支持字符串输入输出的流类,允许将字符串当作流来处理。
文件流
- ifstream
用于从文件读取数据的输入文件流类。
- ofstream
用于向文件写入数据的输出文件流类。
- fstream
同时支持文件输入和输出的流类。
格式化操作
setw、setfill、setprecision 等函数用于控制输出格式,如设置字段宽度、填充字符和精度。
操作符重载
插入操作符<<和提取操作符>>被重载用于简化流的输入输出操作。
流操作函数
如endl、flush、ws等,用于控制流的行为,如插入换行、刷新缓冲区和忽略空白。
流 manipulators
这些是改变流状态的函数,如boolalpha、uppercase等,它们可以改变流的格式化行为。
异常处理
IO流库支持异常处理,可以在I/O操作失败时抛出异常。
定位和迭代
流库支持流定位和迭代,允许在流中随机访问和遍历。
模板支持:
IO流库是模板化的,支持多种数据类型的输入输出。
这些组件共同构成了C的IO流库,提供了一种统一和灵活的方式来处理各种I/O操作。通过这个库,C程序可以轻松地与外部世界进行数据交换。