文本文件与二进制文件的定义

  文本文件:是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。
  二进制文件:是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码。
  从上面可以看出文本文件基本上是定长编码的(也有非定长的编码如UTF-8)。而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。大家可能对BMP文件比较熟悉,就拿它举例子吧,其头部是较为固定长度的文件头信息,前2字节用来记录文件为BMP格式,接下来的8个字节用来记录文件长度,再接下来的4字节用来记录bmp文件头的长度。
 

 文本文件与二进制文件的存取

1、二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放,也就是说存放的是数据的原形式。

2、文本文件是把数据的终端形式的二进制数据输出到磁盘上存放,也就是说存放的是数据的终端形式。

我们有必要把需要存储的数据分为字符数据和非字符数据两类。当你有数据要存储的时候.首先要考虑的问题并不是你要选择用二进制文件还是文本文件来进行存储,而是首先得考虑你要存储的数据是字符数据还是非字符数据.在此基础上再讨论应该选择用什么文件进行存储为好。

一、如果要存储字符数据,无论是放在文本文件还是放在二进制文件中都和内存中的数据形式是没有区别的.同样也和终端形式没有区别。那么在存储和显示的特性上也没有任何区别,不浪费存储空间也不浪费转换时间。所以如果一个文件只存放字符数据,那么讨论该文件是用文本文件或是二进制文件是没有任何意义的。

二、如果要存储非字符数据,则情况要复杂一些。

1、如果您需要频繁地保存和访问数据.那么应该采用二进制文件进行存放,这样可以节省存储空间和转换时间。

2、如果您需要频繁地向终端显示数据或从终端读人数据,那么应该采用文本文件进行存放,这样可以节省转换时间。

三、如果要存储的数据中既有字符数据又有非字符数据那么要怎么办呢?那就要综合上述两点进行权衡以找到最佳平衡点了

总结:字符数据本身在内存中就经过了编码,所以无论是二进制还是文本形式都是一样的,而对于非字符数据来说,例如inti=10;如果用二进制来进行存储的话为1010,但是如果需要用文本形式来进行存储的话就必须进行格式化编码(对1和0分别编码,即形式为‘1’和‘0’分别对应的码值)。

文本文件与二进制文件的优缺点

  因为文本文件与二进制文件的区别仅仅是编码上不同,所以他们的优缺点就是编码的优缺点,这个找本编码的书来看看就比较清楚了。一般认为,文本文件编码基于字符定长,译码容易些;二进制文件编码是变长的,所以它灵活,存储利用率要高些,译码难一些(不同的二进制文件格式,有不同的译码方式)。关于空间利用率,想想看,二进制文件甚至可以用一个比特来代表一个意思(位操作),而文本文件任何一个意思至少是一个字符.
  在windows下,文本文件不一定是以ASCII来存贮的,因为ASCII码只能表示128的标识,你打开一个txt文档,然后另存为,有个选项是编码,可以选择存贮格式,一般来说UTF-8编码格式兼容性要好一些.而二进制用的计算机原始语言,不存贮兼容性. 很多书上还认为,文本文件的可读性要好些,存储要花费转换时间(读写要编译码),而二进制文件可读性差,存储不存在转换时间(读写不要编解码,直接写值).这里的可读性是从软件使用者角度来说的,因为我们用通用的记事本工具就几乎可以浏览所有文本文件,所以说文本文件可读性好;而读写一个具体的二进制文件需要一个具体的文件解码器,所以说二进制文件可读性差,比如读BMP文件,必须用读图软件.
  而这里的存储转换时间应该是从编程的角度来说的,因为有些操作系统如windows需要对回车换行符进行转换(将”\n”,换成”\r\n”,所以文件读写时,操作系统需要一个一个字符的检查当前字符是不是”\n”或”\r\n”).这个在存储转换在Linux操作系统中并不需要,当然,当在两个不同的操作系统上共享文件时,这种存储转换又可能出来。
从存储方式来说,文件在磁盘上的存储方式都是二进制形式,所以,文本文件其实也应该算二进制文件。那么他们的区别呢,各自的优缺点呢?不急,我慢慢道来。

二进制文件读写和文本文件读写的区别

先从他们的区别来说,虽然都是二进制文件,但是二进制代表的意思不一样。打个比方,一个人,我们可以叫他的大名,可以叫他的小名,但其实都是代表这个人。
二进制读写是将内存里面的数据直接读写入文本中,而文本呢,则是将数据先转换成了字符串,再写入到文本中。
下面我用个例子来说明:
我们定义了一个结构体,表示一个学生信息,我们打算把学生的信息分别用二进制和文本的方式写入到文件中。

struct Student
{int num;char name[20];float score;
};

我们定义两个方法,分别表示内存写入和文本写入
//使用二进制写入


#include <iostream>
using namespace std;
#include <fstream>struct Student
{int num;char name[20];float score;
};void write_to_binary_file()
{struct Student stdu;stdu.num = 111;sprintf_s(stdu.name,20,"%s","shine");stdu.score = 80.0f;fstream binary_file("test1.dat",ios::out|ios::binary|ios::app); //此处省略文件是否打开失败的判断binary_file.write((char *)&stdu,sizeof(struct Student));//二进制写入的方式binary_file.close();
}//文本格式写入
void write_to_text_file()
{struct Student stdu;stdu.num = 111;sprintf_s(stdu.name,20,"%s","shine");stdu.score = 80.0f;FILE *fp = fopen("test2.dat","a+");   //此处省略文件是否打开失败的判断fprintf(fp,"%d%s%f",stdu.num,stdu.name,stdu.score); //将数据转换成字符串(字符串的格式可以自己定义)fclose(fp);
}//MAIN函数调用前面两个方法
int main()
{write_to_binary_file();write_to_text_file();return 0;
}

二进制文件和文本文件的区别相关推荐

  1. python二进制文件对比_二进制文件 .VS. 文本文件 > python

    [前言] 最近用python读二进制文件,遇到一个问题:我的二进制文件里面掺杂着正常的文本,我想将里面的文本给剔除掉.解决这个问题就是写这篇文章的初衷. 一.预备知识 二进制文件和文本文件有啥区别呢? ...

  2. 二进制文件和文本文件到底有什么不同?(二)

    1)文本文件:这类文件以文本的ASCII码形式存储在计算机中.它是以"行"为基本结构的一种信息组织和存储方式.  2)二进制文件:这类文件以文本的二进制形式存储在计算机中,用户一般 ...

  3. 二进制文件、文本文件

    先说结论: 二进制文件和文本文件都是按照二进制存储的,只不过文本文件是把一个字节一个字节解读成字符,而二进制文件可以任意定义解读方式. 在windows上,用记事本就可以打开文本文件了,但要打开二进制 ...

  4. 71. 从Lotus Notes表单到XPage——兼谈程序里的二进制文件和文本文件

    本文对比分析了LotusNotes平台上两种视图技术.架构和运转过程的分析特定于Lotus Notes平台,其后的关于二进制文件和文本文件的讨论则具有普遍性.(严格地说,XPages指的是IBM基于L ...

  5. 二进制文件和普通文件(文本文件)区别

    为什么80%的码农都做不了架构师?>>>    1. 定义: 所有对计算机有所了解的人肯定都知道计算机的存储在物理上事二进制形式的.所以文本文件与二进制文件的区别并不是物理上,而是逻 ...

  6. 文本文件和二进制文件的定义与区别

    文本文件:储存的是字符串 定义:由单一特定编码的字符组成,如 UTF-8 编码,内容容易统一展示和阅读.(由于文本文件存在编码,所以,它也可以被看做是存储在磁盘上的长字符串,如一个 txt 格式的文本 ...

  7. html与文本文件区别,流文件与文本文件的区别

    1.对于字符的输入和输出,文本文件与二进制文件没有区别,但对于数值型的数据,在对文本文件进行I/O 时,要进行格式转换,而二进制文件不需要.如:向文本文件输出 12345 时,由于 12345 是一个 ...

  8. 二进制文件和文本文件

    原文查看 1.定义 文本文件:这类文件以文本的ASCII码形式存储在计算机中. 二进制文件:这类文件以文本的二进制形式存储在计算机中. 文本文件与二进制文件的存取 2.读取 文本文件:读取文件物理上所 ...

  9. C语言学习——二进制文件与文本文件

    学习C语言中,在关于文件操作的一些问题,记录一下~ #include <stdio.h> #include <string.h> #include <stdlib.h&g ...

  10. 关于二进制文件与文本文件

    所谓的文本文件其实就是数据格式为字符型,用记事本就能打开的文件,它存储在计算机中以二进制的方式存储,当读出来的时候需要解码,单个字符逐个解码,用UTF-8解码还是unicode取决于用户设置的文本编码 ...

最新文章

  1. SVN从win迁移到Linux上
  2. trap--shell脚本调试的不二人选
  3. mysql libs 5.1.73_【MySQL案例】mysql-libs-5.1.73-3.el6
  4. bug10-graphviz.backend.ExecutableNotFound: failed to execute [‘dot‘, ‘-Tpdf‘, ‘-O‘, ‘Source.gv‘]
  5. 世界上最好玩的6种表情符号编程语言
  6. 综合支撑【恶灵附身 Psycho Break】的世界观的概念艺术
  7. 最全面的Kano模型详解,及Kano模型为何是5种需求?
  8. python excel转csv日期变数字_将Excel转换为CSV正确转换日期字段
  9. 日期格式化时候yyyy-MM-dd HH:mm:ss大小写区分
  10. initialize php,thinkPHP中_initialize方法实例分析
  11. 【ASP.NET Core分布式项目实战】(三)整理IdentityServer4 MVC授权、Consent功能实现...
  12. canonical的概念用途及用法详细解说,seo不可不看!
  13. JAVA day06:代码作业(封装)
  14. C语言中的sprintf()函数使用出错原因
  15. 力扣 旋转字符串 C语言 题解
  16. Easypoi的简单教程
  17. 微信支付,“签名错误,请检查后再试” 的坑爹经历
  18. Java中的Hash值到底是怎么计算的
  19. bsd mac linux,macos-Mac OS X和BSD有多紧密的联系?
  20. 2021-2027全球与中国汽车电动多回转执行器市场现状及未来发展趋势

热门文章

  1. 考研数学各科的“命题潜规则”,看完多得好几分!(文末附汤家凤1800习题册重点题勾选)
  2. android手机录屏多少fps,如何在Andr如何在Android上以90fps或120fps的屏幕录制
  3. 绝缘检测是什么? 绝缘检测原理 绝缘检测检测的是什么?那个量?电压?电流?电阻?
  4. 如何测试WiFi路由器小包性能
  5. linux上卓懿应用商城王者荣耀键盘映射如何设置?
  6. x01.wos: 纸娃娃系统
  7. 商务数据分析与应用学习笔记
  8. 心理测评软件php mysql_中小学版心理测评档案管理系统
  9. 【python】CNN算法
  10. sql插入数据时自动插入时间