IO库简介

一、 IO类

1、在IO类中有三个独立的头文件,如下:

  • iostream:定义了用于读写的基本类型
  • fstream:定义读写命名文件的类型
  • sstream:定义读写内存中string对象的类型

2、IO库类型和文件:

头文件 类型
iostream istream:从流中读取数据
ostream:向流中写入数据
iostream:读写流
fstream ifstream:从文件中读取数据
ofstream:向文件中写入数据
fstream:读写文件
sstream istringstream:从string 中读取数据
ostringstream:向string 中写入数据
stringstream:读写string

3、各类型的继承关系
在这里插入图片描述
4、不能对IO对象进行拷贝或这赋值

// 正确,可以将初始值与流对象进行绑定初始化
ofstream out1("D:\\Files\\TheFile\\log01.txt");

// 错误,不能对流对象进行赋值
ofstream out2;
out2 = out1;

因为不能进行拷贝流对象,因此不可以将形参或返回类型设置为流类型。进行IO操作的函数通常以引用方式来传递和返回流。读写一个IO对象会改变其状态,因此传递和返回的引用不能为const

5、IO对象操作的条件状态
在IO操作中一个流一旦发生错误,其上后续的IO操作都会失败。由于流可能会出现错误,因此在使用一个流之前最好要检查它是否处于良好的状态。可以将其当作一个条件来进行使用。

while(cin>>word) 
{
	//当以上流无错误时才会进行对应的操作。
}

while 循环检查条件中所返回流的状态,如果输入操作成功,流保持有效状态,此时条件为真。

6、输出缓冲管理

(1)、每个输出流都管理一个缓冲区,用来保存程序读写的缓冲数据。如执行 cout<<"hello"; 代码,文本可能立刻打印,也可能被操作系统保存到缓冲区中,随后才进行打印。有了设备缓冲机制,操作系统就可以将多个输出操作组合成单一的系统级写操作。由于设备的写操作会很耗时,这样的操作可以大大的提高系统的性能。
(2)、导致缓冲刷新的主要原因如下:

  • 程序正常结束时,缓冲被刷新。
  • 缓冲区满时,需要刷新缓冲,才能将新的数据写入到缓冲区
  • 可以使用endl来显式的刷新缓冲区。
  • 可以使用操作符unitbuf来设置内部流状态,清空缓冲区。默认情况下对cerr是设置unitbuf的,因此写到cerr中的内容是立刻被刷新的。
  • 一个输出流可能会被关联到另一个流,这种情况下,当读写被关联的流时,关联到的流的缓冲区会被刷新。如默认cincerr都关联到cout。因此读cin或写cerr都会导致cout的缓冲区被刷新。

(3)、IO库中有三个操纵符:endlflushends。其中endl刷新缓冲区并换行;flush刷新缓冲区,但是不输出任何额外字符;ends向缓冲区中插入一个空字符,然后刷新缓冲区。

cout << "hi" << endl; //输出hi和一个换行符,然后刷新缓冲区
cout << "hi" << flush; //输出hi,然后刷新缓冲区,不附加任何额外字符
cout << "hi" << ends; //输出hi和一个空格,然后刷新缓冲区

(4)、unitbuf 操纵符。如果向每次输出操作后都刷新缓冲区,可以使用 unitbuf。它在接下来的每次写操作之后都进行一次flush操作。而nounitbuf则重置流,使其恢复之前的状态。

//所有输出操作后都立即刷新缓冲区
cout<<unitbuf;

//回到正常缓冲方式
cout<<nounitbuf;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章