C++ 输入输出流 文本文件 二进制文件读写

时间:2022-09-25 18:13:47

文本文件/ASCII文件(能直接显示内容,费存储空间):文件中每一个字节中均以ASCII代码形式存放数据,即一个字节存放一个字符,这个文件就是ASCII文件或称字符文件。

二进制文件(不能显示内容,节省存储空间) :将内存中的数据存储形式不加转换的传送到磁盘文件,内存数据的映像文件,因为文件中的信息不是字符数据,而是字节中的二进制形式信息。

两者操作都需要先打开文件,用完关闭文件。在打开时用ios::binary指定为以二进制形式传送和存储。

二进制文件除了可以作为输入文件或者输出文件外,还可以既能输入又能输出的文件,这是和ASCII文件不同的地方、
简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码。

从上面可以看出文本文件基本上是定长编码的(也有非定长的编码如UTF-8)。而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。大家可能对BMP文件比较熟悉,就拿它举例子吧,其头部是较为固定长度的文件头信息,前2字节用来记录文件为BMP格式,接下来的8个字节用来记录文件长度,再接下来的4字节用来记录bmp文件头的长度,bmp就是一个自定义的二进制文件,只是格式固定了。一般自己定义的二进制文件需要按自定义格式来识别内容。

二.iostream类:C++用于输入输出的类库。

在C++中,输入输出流被定义为类,C++的I/O库中的类称为流类,用流类定义的对象称为流对象。

流中的内容可以是ASCII字符,二进制形式的数据,图形图像,数字音频视频或其他形式的信息。

I/O类库中常用流类

类名                  作用                                        在哪个头文件中声明

ios               抽象基类                                         iostream

istream        通用输入流和其他输入流的基类             iostream

ostream       通用输出流和其他输出流的基类             iostream

iostrean       通用输入输出流和人其他输入输出流的基类 iostream

ifstream       输入文件流类                                    fstream

ofstream      输出文件流类                                    fstream

fstream        输入输出文件流类                              fstream

istrstream    输入字符串流类                                 strstream

......................................

C++ 输入输出流 文本文件 二进制文件读写

2 有关头文件

iostream 包含对输入输出流进行操作所需的基本信息

fstream 用于用户管理的文件的i/o操作

strstream 用于字符串流的i/o

stdiostream 用于混合使用C和C++的I/O机制时,例如想将C程序转变为C++程序

iomanip 在使用格式化I/O时应包含此头文件

iostream头文件中定义的类有ios,istream,ostream,iostream等

iostream 包含了对输入输出的进行的基本操作所需信息,因此大多数C++程序都包括iostream

iostream 中还定义了4中流对象 cin(键盘),cout(屏幕),cerr(屏幕),clog(屏幕) 定义形式:ostream cout(stdout)

3 iostream头文件中重载运算符

在istream 和ostream类中分别对>>和<<进行了重载,以便于能用它输入输出各种标准数据类型的数据:

ostream operator <<(int); //用于向输出流插入一个int数据

ostream operator <<(flaot); //用于向输出流插入一个float数据

ostream operator <<(char); //用于向输出流插入一个char数据

ostream operator <<(char *); //用于向输出流插入一个字符串数据

注意 自定义类型重载>> <<,在类内声明为友元函数重载。

4 cout.put('a');流成员函数put输出字符

5 cin是iostream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符>>从流中提取数据。流提取符>>从流中提取数据时通常跳过输入流中的空格 tab键 换行符等空白字符。注意:只有在输入完数据再按回车键后,改行数据才被送入键盘缓冲区,形成输入流,提取运算法>>才能从中提取数据。

ch=cin.get();读入一个字符

cin.get(ch);

cin.get(字符指针/数组,字符个数n,终止字符)

cin.getline(字符指针/数组,字符个数n,终止字符) 两个区别:cin.get函数从输入流读字符时,遇到终止字符时停止读取,指针不向后移动,仍然停在终止符之前的位置,在下一次读取时从终止符开始。后者会跳过终止符。

前者得借助ignore函数跳过终止符,

6 cin.eof(),cin.peek(),cin.outback(),cin,ignore(n,终止字符)

7.

C++ 输入输出流 文本文件 二进制文件读写的更多相关文章

  1. 【转】iphone 输入&sol;输出流异步读写数据

    原文:iphone 输入/输出流异步读写数据 分类: iphone2012-05-30 14:50 2484人阅读 评论(1) 收藏 举报 iphoneattributesinterfacepaths ...

  2. C&plus;&plus;入门到理解之文件操作&lpar;文本文件的读写&plus;二进制文件的读写&rpar;

    原文地址http://www.javayihao.top/detail/168 一:概述 1.程序在运行中产生的数据都是临时数据,程序一旦运行结束会被释放,可以通过文件相关的操作将数据持久保存. 2. ...

  3. JAVA核心技术I---JAVA基础知识(二进制文件读写和zip文件读写)

    一:二进制文件读写 (一)写文件 –先创建文件,写入数据,关闭文件 –FileOutputStream, BufferedOutputStream,DataOutputStream –DataOutp ...

  4. Java高级特性 第4节 输入输出流

    一.使用I/O操作文件 关键步骤: 使用File类操作文件或目录属性 使用FileInputStream类读文本文件 使用FileOutputStram类写文本文件 使用BufferedReader类 ...

  5. c&plus;&plus;语言的输入输出流库

    1.c++语言标准输入输出流 <1>控制符的用法 #include <iostream> #include <iomanip> using namespace st ...

  6. Java IO学习--输入输出流

    一.Java IO的定义 I/O:输入输出系统,由输入输出控制系统和外围设备两部分组成. Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输 ...

  7. C&plus;&plus; STL——输入输出流

    [TOC] 注:原创不易,转载请务必注明原作者和出处,感谢支持! 注:内容来自某培训课程,不一定完全正确! 一 缓冲区 (1)标准输入:从键盘输入数据到程序(input) (2)标准输出:程序数据输出 ...

  8. java 3 接口与多态&amp&semi;输入输出流

    接口 中的所有方法都是方法 抽象 使用接口实现多继承 类型的装换 数据成员就变成了static 和 final food 和 snow 都是可以吃的 可以同时实现多个接口 接口与接口之间也可以有继承关 ...

  9. java输入&sol;输出流的基本知识

    通过流可以读写文件,流是一组有序列的数据序列,以先进先出方式发送信息的通道. 输入/输出流抽象类有两种:InputStream/OutputStream字节输入流和Reader/Writer字符输入流 ...

随机推荐

  1. matlab中元胞数组(cell)转换为矩阵

    matlab中元胞数组(cell)转换为矩阵. cell转换为矩阵函数为:cell2mat(c),其中c为待转换的元胞数组: 转化之后的矩阵可能不满足我们对矩阵维数的要求,那么也许还需要下面两个函数: ...

  2. Python学习笔记整理&lpar;三&rpar;Python中的动态类型简介

    Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之 ...

  3. JAVA 内存的认识【转】

    [转]:http://blog.sina.com.cn/s/blog_68158ebf0100wp83.html 一.Java内存的构成     先上一个官方java document里的图: 由上图 ...

  4. 解决 Mybatis 元素类型为 &quot&semi;resultMap&quot&semi; 的内容必须匹配 &quot&semi;&lpar;constructor&quest;&comma;id&ast;&comma;result&ast;&comma;association&ast;&comma;collection&ast;&comma;discriminat

    在配置 mybatis mapper.xml文件时, 一不小心就会报如下类似的异常: Caused by: org.springframework.beans.factory.BeanCreation ...

  5. Springboot中使用AOP统一处理Web请求日志

    title: Springboot中使用AOP统一处理Web请求日志 date: 2017-04-26 16:30:48 tags: ['Spring Boot','AOP'] categories: ...

  6. 我的代码-flask

    import pickleimport flaskimport pandas as pdimport jsonfrom flask import Flaskfrom flask import requ ...

  7. LaTeX Error&colon; Something&&num;39&semi;s wrong--perhaps a missing &bsol;item

    使用Latex 引用参考文献,.bib文件是个很好的助手,创建后 1.第一步点击Latex编译,可以获得*.aux文件.*.dvi文件.*.log文件以及*.gz文件: 2.第二步点击Bibtex编译 ...

  8. &lbrack;原创&rsqb;Jmeter工具学习思维导图

    [原创]Jmeter工具学习思维导图

  9. Maven最佳实践-distributionManagement

    分发构件至远程仓库 mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库.本地Maven仓库的构件只能供当前用户使用, ...

  10. WebService—CXF整合Spring实现接口发布和调用过程

    一.CXF整合Spring实现接口发布 发布过程如下: 1.引入jar包(基于maven管理) <!-- cxf --> <dependency> <groupId&gt ...