一,基础概念
C++的IO操作是基于字节流,并且IO操作与设备无关,同一种IO操作可以在不同类型的设备上使用。
C++的流是指流入/流出程序的字节序列,在输入操作中数据从外部设备(键盘,文件,网络等)流入程序,在输出操作中数据从程序流向外部设备(控制台,文件,网络等)。
流充当了程序与外部设备之间的管道,使程序中的具体操作独立于各种外部设备。
常用的流:基础输入输出流,文件流,字符串流。
流的实例不仅包含普通的数据,还包含表示当前位置的数据。
在C++编程中,流的使用步骤如下:
1.实例化一个流对象。
2.将流对象关联到实际的外部设备(键盘,控制台,文件,网络等)。
3.调用流对象中提供的成员函数,完成数据的转换、传输等操作。
4.断开流对象与外部设备的关联,比如关闭文件。
5.释放流对象占用的内存资源。
流具有缓冲区,大部分时候,往流中写入数据后,流并不会马上把数据输出到指定目的地,为了提高性能,流先用缓冲区将数据存储起来,缓冲区达到一定大小后再输出到指定目的地。
刷新缓冲区的条件:
遇到触发的函数,如endl。
流对象离开作用域,被析构时。
流的缓冲区被写满。
显式调用flush()函数。
流对应的头文件有<ostream>, <fstream>等。
流支持的数据类型:数值类型,指针,char类型,std::string类,C风格字符串等。
std标准库包含预定义的流的实例,有cout,cin,cerr,clog等。
二,输出流
1.输出流的定义
对应运算符:operator<<
含义:流中的数据输出到外部设备,"设备 << 程序"。
<<运算符返回的是对一个流的引用,因此,可以连续调用多次<<运算符,来连续输出多段数据。
C++流遇到C风格的转义字符,比如“\n”,可以自动做解析。
“\n”和end都可以实现换行,但是“\n”只是换行,而end还会刷新缓存。
2.输出流的原始方法
(1).输出
put():写入单个字符。
write():写入字符数组。
代码样例,输出到控制台打印:
const char* test = "hello there";
cout.write(test, strlen(test));
cout.put('a');
(2).刷新缓冲区