一、二进制数据文件和文本文件对比
ios::binary //二进制方式打开
文本文件 | 二进制数据文件 (类型文件) | |
读写顺序 | 顺序 | 任意次序 |
是否有格式转化 | 有(将所有数据 转成字符类型) | 无,便于高速处理数据(以数据的二进制代码存储,存储长度仅与数据类型有关) |
是否容易 修改信息 (参见解释1) | 否,更新数据需要重建文件 | 是 |
结束标志 (参见解释2) | eof | 加一个特殊标志mark |
解释1:例如把3.14改成3.1415,虽然它们都是double 类型的,但是在文本文件中是不同长度的字符串,直接在原文件中修改会破坏后面其他的数据(因为其他数据的字符位置已定,且紧紧相连着无空隙排列),而二进制数据文件就没有这个问题,double类型都是8字节,存储空间无变化。
解释2:
(大佬同学的解释)
二、指针函数
g对应读,p对应写
1.
读:istream input;
移动input流的读指针:
1.input.seekg(120); //表示读指针移到第120个字节处
2.input.seekg(20,ios::beg); //表示读指针从开头位置,后移20个字节
第一个参数:+x表示后移x个字节,-x表示前移
第二个参数:枚举类
ios::cur 当前指针位置
ios::beg 流的开始位置
ios::end 流的末尾位置
返回当前指针位置:
long pos=input.tellg();
2.
写:ostream output;
移动output流的写指针:
1.output.seekp(120); //表示写指针移到第120个字节处
2.output.seekp(20,ios::beg); //表示写指针从开头位置,后移20个字节
(同读指针函数的解释 )
返回当前指针位置:
long pos=input.tellp();