C++笔记(9):IO输入输出流

                  输入输出流

C++的输入输出流是IO系统向用户提供一个统一的接口,它隔离了具体的设备差异。
包括标准输入输出流和文件流。
标准输入输出流

istream是输入流类,cin就是istream类型的对象。
ostream是输出流类,cout是ostream类型的对象。
 
在C++中允许用户重载运算符“<<”和“>>”,实现对象的输入和输出。

重载这二个运算符时,在对象所在的类中,将重载这二个运算符的函数说明该类的友元函数。

C++在头文件fstream.h中定义了C++的文件流类体系 ,当程序中使用文件时,要包含头文件fstream.h 。

其中定义了各种文件操作运算符及函数。

在涉及文本文件的操作时,将输入文件看成键盘,将输出文件看成显示器,格式不变。只需在程序中增加打开与关闭文件的语句。
文件可以分为两大类:文本文件、二进制文件。
 
定义文件对象
有三种类型的对象:
fstream file;//既可读又可写。
ifstream infile;//可读不可写。
ofstream outfile;//可写不可读。
 
打开文件
ifstream infile;
infile.open(“C:\\myfile.txt"); //与文件建立关联
ofstream outfile;
outfile.open(“myoutfile.txt”);
 
读写文件
Std::string str;
Infile>>str;//从文件流中输入。
 
Outfile<<str;
 
关闭文件
Infile.close();
Outfile.close();
关闭后释放文件对象,取消与文件的关联。
 
定义fstream对象后,既可以对文件读又可以写。因此在open时需要给定打开的方式:
fstream  file1,file2;//定义了两个文件类的对象
file1.open(“file1.txt”,  ios::in);//用于输入
pile2.open(“file2.txt”, ios::out);//用于输出
 
在open时常常会因为文件不存在,或正在被占用而打开失败。
可以通过对文件对象进行判断来得知是否打开成功。
file1.open(“file.txt”, ios::in);
if(!file1)

  //文件打开失败。
}
 
有一个约定:
在打开文件进行读时,若文件不存在则打开失败。
写时,若文件不存在则新建一个文件。若存在则删除原来的文件的内容。
 
文本文件与二进制文件读取方法不同:
读写文本文件
从文件读取一个字符:file.getch(ch);
读取一行数据:File.getline(str);
从文件读取时,当读取到文件尾时,函数返回值为0,可以据此来判断循环结束。
向文件写入一个字符:file.put(ch);
 
实例,实现两个文件的拷贝
 
 
打开二进制文件
若在文件的open方法时没有特别说明,默认打开的文本文件,若要打开二进制文件,则要特别说明。
fstream   infile,outfile;
infile.open(“inf1.dat”,  ios::in| ios::binary);
outfile.open(“outf1.dat”,  ios::out| ios::binary);
ios::out和ios::in表示IO模式。枚举类型,多个枚举值可以使用运算符”|“组合使用。  
 
二进制文件的关闭
关闭方法都一样,调用close方法。
 
二进制文件的读写
二进制文件的读写与文本文件不同,使用专门的方法。
infile.read( char *buff,   int nNum);
buff存储数据的缓冲,nNum为要读取的长度,返回实际读取的数据长度。
infile.read(&Stuinfo, sizeof(Stuinfo));
infile.read(pBuff, 1024*sizeof(char));
 
向文件写入数据:
outfile.write( pBuff, nLen );
write返回实际写入的数据长度。
 
二进制文件的结束
infile.eof( )    
当到达文件结束位置时,该函数返回一个非零值;否则返回零。
 
文件指针
打开文件之后,读取或写入一段数据之后,文件指针都会移动到读取或写入的数据的末尾。
如file.read(pBuff, 1024);
读取成功之后,文件指针向后偏移1024字节。
 
file.write(pBuff, 10);
写入成功之后,文件指针向后偏移10个字节。
 
读写方法可以自动的移动文件指针,除此之外还可以通过一个专门的函数随机的移动文件指针。
infile.seekg(nNum, ios::cur);
nNum为移动的字节数。
ios::cur表示从当前位置。还有另外两个相对位置:ios::begin ,ios::end;
infile.seekg(10, ios::begin);//相对文件开始将文件指针移动10个字节。
infile.seekg(-20, ios::end);//相对文件结束,向前移动20字节
 
实例,实现两个二进制文件的拷贝。

时间: 2024-10-16 17:49:47

C++笔记(9):IO输入输出流的相关文章

IO输入输出流——Java面向对象基础(29)

一.概念 IO(输入输出流) InputStream 输入流 OutputStream 输出流   输入输出流广义上就是物理存储介质.设备.容器数据的传输过程.   Java中提供一个强大的api操作IO,java.io包 二.常见的File类 File常常用于操作系统文件或目录,其中常用的方法务必掌握. File file = new File("填写文件|文件目录的路径"); createNewFile()  创建文件 delete()   删除文件或目录 exists()  判断

java.IO输入输出流:过滤流:buffer流和data流

java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? 不带缓冲的操作,每读一个字节就要写入一个字节. 由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低. 带缓冲的流,可以一次读很多字节,但不向磁盘中写入,只是先放到内存里. 等凑够了缓冲区大小的时候一次性写入磁盘,这种方式可以减少磁盘操作次数,速度就会提高很多! 这就是两者的区别

Java IO输入/输出流的套接

缓冲字符流BufferedInputStream / BufferedOutputStream 文件操作流 InputStream / OutputStream java 输入输出流的套接,测试一下流链的速度 因为节点流在程序中并不是很常用,一般常通过过滤流将多个流套接在一起,利用各流的特性共同处理数据,套接的多个流构成了一个流链: 我们来分析他们的运行时间.(因为在不同的系统(maxOX,Linux,WIN(32/64))上运行的时间可能都不相同)我截取了几段时间来进行对比. 1.缓冲字符流B

c++中IO输入输出流总结&lt;二&gt;

1 文件的打开和关闭 1.1 定义流对象 ifsteam iflie;//文件输入流对象 ifsteam iflie;//文件输出流对象 fsteam iflie;//文件输入输出流对象 1.2 打开文件 void open(const unsigned char* filename,int mode,int accessfilebuf:opnprot) mode为打开的方式,相关标记如下图所示(ios中) 注意: (1)通常打开方式用|组合起来 ios::in|ios::out  //读写方式

Java IO输入输出流 笔记

String s = "慕课ABC"; byte[] bytes1 = s.getBytes();//转换成字节序列用的是项目默认的编码 ,编码GBK for(byte b : bytes1) { //把字节(转换成)int以16进制的方式显示, 只显示后8位 System.out.println(Integer.toHexString(b & 0xff) + " "); } //gbk编码中文占用两个字节,英文占用1个字节 //utf-8编码中文占用3个字

c++中IO输入输出流总结&lt;一&gt;

1 io类图关系 1.1 简化形式 1.1.2补充 iostream: istream:从流中读取 ostream:写入到流 iosteram:读写流 fstream: ifstream:从文件读 ofstream:写入文件 fstream:读写文件 2 流综述 2.1什么情况会导致刷缓冲 (1)程序正常结束,作为main函数结束的一部分将清空所有的缓冲区 (2)缓冲区满会刷缓冲 (3)endl flush刷缓冲 (4)在每次输出操作执行完后用unitbuf操作符设置流内部状态从而清空缓冲区 2

Java的IO输入输出流类的介绍(有图)

一.字节流 1.InputStream/OutputStream(输入流与输出流几乎一一对应) 读取的方法   int read()   int read(byte[] buffer)   int read(byte[] buffer,int offset,int length) 2.各种类的区分,常用的9种(按处理的基本单位划分) 2.1.以字节数组为颗粒(颗粒就是基本单位的意思) ByteArrayInputStream 2.2.以文件为颗粒 FileInputStream 2.3.管道流(

IO 输入输出流

1) 数据流: 一组有序,有起点和终点的字节的数据序列.包括输入流和输出流. 2) 输入流(Input  Stream): 程序从输入流读取数据源.数据源包括外界(键盘.文件.网络…),即是将数据源读入到程序的通信通道  3) 输出流: 程序向输出流写入数据.将程序中的数据输出到外界(显示器.打印机.文件.网络…)的通信通道. 采用数据流的目的就是使得输出输入独立于设备. Input  Stream不关心数据源来自何种设备(键盘,文件,网络) Output  Stream不关心数据的目的是何种设

课堂笔记 0606 数据输入输出流DateInputStream

DateInputStream 是针对基础的byte输出流的功能扩展 DateOutputStream 一对流 扩展出基本类型的IO方法:writeInt() writeDouble() BufferedOutputStream 用于IO性能提高,缓存区为8M. 用于序列化和反序列化.