输入输出过程
输入输出缓冲区的作用
- 能够屏蔽低级IO的实现,低级IO的实现依赖操作系统自身,所以如果可能屏蔽这部分的差别,能够很容易写出可移植程序。
- cin从控制台读取数据时,空格示意将数据存储在不同的缓冲区(一个cin有一个缓冲区)
string a;cin >> a; //输出 aa bb (两头有空格)cout << a << endl; //输入aa,输入第一个缓冲区的内容
string a;cin >> a; //输出 aa bb (两头有空格)cout << a << endl; //输入aa,输入第一个缓冲区的内容cin >> a; //第二个缓冲区,在下面输出aa bb按回车后,就不会再次进行输出了cout << a << endl; //输入bb,第二个缓冲区内容。
文件IO流<fstream>
ifstream读文件
explicit ifstream (const char* filename, ios_base::openmode mode = ios_base::in);
- filename :文件名(如果文件不存在,零碎不会主动创立文件,读取失败,零碎也不会报错)
- mode :操作文件的模式,默认为读文件
ofstream写文件
explicit ofstream (const char* filename, ios_base::openmode mode = ios_base::out);
- filename :文件名(如果文件不存在,则会主动创立一个文件)
- mode :操作文件的模式,默认为读文件
- 上面的 >> 、 <<的文件操作形式是C++独有的,C没有。
int main(){ ofstream ofs; string arr1 = "abcdef"; string arr2 = "192.168"; ofs.open("text.text", std::ofstream::out); //以写的模式关上文件 ofs << arr1 << " " << arr2; //向text.text文件中写入数据 ofs.close(); //敞开文件 ifstream ifs("text.text"); //以读的模式关上文件 ifs >> arr1 >> arr2; //读取8个字符,保留在arr中。 cout << arr1 << endl; cout << arr2 << endl; return 0;}
序列化与反序列化sstream
#include <iostream>#include <fstream>#include <sstream>int main(){ int a = 123456; string b = "abcdef"; int aa; string bb; stringstream sst; sst << a << "\n" << b; //序列化 cout << sst.str() << endl; sst >> aa >> bb; //反序列化 cout << aa << endl; cout << bb << endl; return 0;}