IO即 Input和Output, C++通过一组定义在标准库类型中的类型处理IO, IO的目标对象可以是设备(文件, 控制台窗口等)或者内存(string类型).
IO库类型有哪些?
iostream头文件下定义的IO类型
istream, wistream: 从流中读取数据otream, wostream: 向流中写入数据iostream, wiostream: 读写流fstream头文件下定义的IO类型
ifstream, wifstream: 从文件读取数据ofstream, wofstream: 向文件写入数据fstream, wfstream: 读写文件sstream头文件下定义的IO类型
istringstream, wistringstream: 从string读取数据ostringstream, wostream: 向string写入数据stringstream, wstringstream: 读写string
w前缀表示支持宽字符集
IO类的继承机制 简单说ifstream和istringstream都继承自istream, 也就是, 可以使用istream的地方就可以使用ifstream和istringstream替代, 但是可以用ifstream和istringstream的地方不可以用istream替代, 对输出流也有同样的继承关系.
可以将文件和string理解为一种特殊的流.
流的状态(条件状态) IO操作是可能出错的, 所以我们需要知道流的状态, 称为条件状态. 流的状态以及查询设置流的状态的内容不再赘述.
管理输入输出缓冲区 每一个输出流都管理一个输出缓冲区, 数据可能暂时存储在该缓冲区中, 直到缓冲区被刷新才会被真正写到要输出的设备或文件中. 缓冲区在以下情况下会被刷新:
程序正常结束, return操作中缓冲区会被刷新缓冲区满时使用endl ends flush等操纵符显式的刷新使用unitbuf设置流的内部状态为立即刷新, 则每个输出操作后缓冲区都会立即刷新一个输出流可以被关联到其他流, 当读写与输出流关联的流时都会导致输出流缓冲区的刷新
endl ends flush的区别
endl: 向缓冲区末尾添加一个换行符, 然后刷新缓冲区ends: 向缓冲区末尾添加一个空字符, 然后刷新缓冲区 flush: 直接刷新缓冲区
文件模式 每一个流都有一个与之关联的文件模式, 以表明该流如何使用文件 文件模式包括:
in: 以读的方式打开out: 以写的方式打开app: 每次写操作均定位到文件末尾ate: 打开文件后立即定位到文件末尾trunc: 截断文件binary: 以二进制方式进行IO
不再赘述.