文本文件与二进制文件的区别
以下内容源于网络资源的学习与整理,如有侵权请告知删除。
一、文本文件与二进制文件的定义
计算机以二进制数字0和1存储数据,因此在物理层面上,文本文件和二进制文件没有本质差异,都是由数字0和1构成的集合。
两者的差异体现在编码逻辑。
文本文件是基于字符编码的文件,一般采用定长编码方式,比如ASCII编码、UNICODE编码。其中ASCII编码采用8个特定的比特来表示每一个字符,而UNICODE编码采用16比特。
二进制文件直接由二进制数字0和1组成,不存在统一的字符编码,也就是说由你来决定多少个比特表示一个什么值,你可以根据具体的应用来指定这些比特的含义,类似于自定义编码,而且是不定长度的编码。
比如 bmp文件,它开始的部分是文件头信息,前2个字节表示文件格式为BMP格式,接着的 8个字节表示文件的长度,再接着的4个字节表示 bmp文件头的长度。从中可以看出,解析bmp文件时是不定长度的,2、4、8字节长度的都有。因此bmp文件是二进制文件。
二、文本文件与二进制文件的存取
打开一个文本文件的过程是怎样的呢?这里以打开某个记事本文件为例进行说明。
文件系统首先读取这个记事本文件所对应的二进制比特流,然后按照你选择的解码方式来解析这个比特流,最后将解析的结果显示出来。
如果你选择ASCII码来解析,那么文件系统会以8比特为单位来解析这个比特流。
比如有一个比特流“01000000010000010100001001000011”,如果按照ASCII码来解码,第一组的8个比特“01000000”对应着字符“A”,其余三组的8个比特分别对应着字符“B”“C”“D”,于是这个比特流就被解析为“ABCD”,因此打开这个记事本时,记事本界面就显示“ABCD”。
注意,记事本无论打开什么类型的文件,都会按照既定的字符编码工作(比如 ASCII码)。因此使用记事本打开二进制文件时,必然会出现乱码,因为解码不正确。比如比特流“00000000000000000000000000000001”,在二进制文件中可能对应着一个四字节长度的整数1,却被记事本解析为"NULLNULLNULLSOH"这四个控制符。
文本文件的存储与读取是逆过程,不再赘述。二进制文件的存取与文本文件的存取类似,两者只是编解码的方式不同,也不再赘述。
三、文本文件与二进制文件的优缺点
文本文件与二进制文件,两者的区别主要体现在编码,因此两者优缺点就是编码的优缺点。
文本文件编码基于字符定长,译码容易些;二进制文件编码是变长的,所以它灵活,存储利用率要高些,译码难一些(不同的二进制文件格式,有不同的译码方式)。空间利用率方面,二进制文件甚至可以用一个比特来代表一个意思,而文本文件至少使用一个字符来表示一个意思,因此二进制文件的空间利用率比文本文件要高。
很多书上还认为,文本文件的可读性要好一些,但读写时需要转换时间;而二进制文件的可读性差,但读写时不需要转换时间。
可读性是从软件使用者角度来说的。我们使用通用的记事本工具,就几乎可以浏览所有文本文件,所以说文本文件可读性好;读写某个二进制文件需要一个特定的文件解码器,比如读写bmp文件必须使用读图软件,所以说二进制文件可读性差。
读写转换时间是从编程角度来说的。
有些操作系统,比如 windows操作系统,在读写文本文件时,需要进行“\n”和“\r\n”之间的转换:将缓冲区中的数据写入硬盘时,每遇到一个换行符 “\n”(对应着0AH),首先把它转换成回车换行符“\r\n”(对应着0D0AH),也就是把 0AH改为0D0AH,然后再把转换后的数据写入硬盘;将硬盘中的文本文件的数据读取到缓冲区时,每遇到一个回车换行符“\r\n”(对应着 0D0AH),首先把它转换成“\n”(对应着0AH),也就是把0D0AH改为0AH,然后再把转换后的数据送入缓冲区。这个查找与转换的过程需要耗费一定的时间。另外,linux系统读写文本文件不需要进行这样的转换。
所有的操作系统在读写二进制文件时,不需要进行任何转换:将缓冲区中的数据写入硬盘时,直接将数据写入硬盘即可;将硬盘中的二进制文件的数据送入缓冲区时,直接将数据送入缓冲区即可。
四、代码示例
读写文本文件与读写二进制文件,两者没有本质的区别,都是内存缓冲区与硬盘文件比特流之间的交互过程,不同之处在于读写文本文件时,存在换行符“\n”与回车换行符“\r\n”之间的转换。
当内存缓冲区中没有换行符“\n” 时,将缓冲区中的数据写入文本文件,与将缓冲区中的数据写入二进制文件,两者的操作结果是一样的。当硬盘文件中没有回车换行符“\r\n”时,读取文本文件和读取二进制文件,两者的操作结果是一样的。
值得注意的是,这种转换不需要写代码来处理,因为它由操作系统自动完成。
读写文本文件和二进制文件的代码如下所示。
(1)将硬盘中的文本文件读到缓冲区
#define _CRT_SECURE_NO_WARNINGS // 允许使用过时的函数和不安全的函数,去掉警告
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(int argc,char** argv)
{char file_path[] = "C:\\Users\\Administrator\\Desktop\\aa.txt";FILE *file = fopen(file_path,"r"); // r\w\rwif (file == NULL) //判断一下文件是否为空{printf("当前文件不存在\n");return 0;}char buffer[100]; //定义缓冲区while (fgets(buffer,100,file))//缓冲区首地址,每次读取的长度,源文件{printf("%s",buffer); //打印文件内容,注意这里不加换行符}fclose(file); //关闭文件流getchar(); //若不加这行代码,VS环境下的控制台窗口会一闪而过return 0;
}
(2)将缓冲区的数据写入硬盘中
#define _CRT_SECURE_NO_WARNINGS // 允许使用过时的函数和不安全的函数,去掉警告
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(int argc,char** argv)
{//指定将数据写到哪个文件 char file_path[] = "C:\\Users\\Administrator\\Desktop\\a.txt";//打开该文件,获取该文件的描述符FILE *file = fopen(file_path, "w");//定义缓冲区的内容,即准备把什么内容写到文件中char content[] = "I Have a Dream";//将缓冲区的内容写到文件中//参数1表示写入什么内容,参数2表示(写到哪个文件的)文件的描述符fputs(content,file);fclose(file);getchar();return 0;
}
文本文件与二进制文件的区别相关推荐
- 文本文件和二进制文件的区别
广义的二进制文件即指文件,由文件在外部设备的存放形式为二进制而得名.狭义的二进制文件即除文本文件以外的文件.文本文件是一种由很多行字符构成的计算机文件.文本文件存在于计算机系统中,通常在文本文件最后一 ...
- 计算机中,文本文件和二进制文件的区别
文本文件和二进制文件都是存储的二进制0和1,区别在于: 文本文件:二进制是以字符编码方式存储的,如utf-8, gbk,规则简单 二进制文件:二进制没有以字符编码的方式存储,规则复杂,只有计算机能够理 ...
- 文本文件和二进制文件的区别和联系
目录 文件类型 ASCII码 文本文件和二进制文件 程序 最近使用MATLAB将文本文件转换为二进制文件时遇到了一些麻烦,回头补了补当年学的文件存储,对计算机中文件存储理解更深刻了,在这里 ...
- python文本文件和二进制文件的区别_以文本格式和二进制格式打开文件,到底有什么区别?...
以文本格式和二进制格式打开文件,到底有什么区别? 我们知道,open() 函数第二个参数是一个字符串,用于指定文件的打开方式,如果该字符串中出现 b,则表示以二进制格式打开文件:反之,则以普通的文本格 ...
- 【文本文件与二进制文件的区别;文件打开与关闭的方法、不同读写方式】(学习笔记19--文件上)
目录 文件的打开与关闭 文件的打开 文件的关闭 标准文件流 文件流的重定向 文件的读写 以字符的方式读写文件 以行的方式读写文件 以格式化的方式读写文件 以块的方式读写文件 文件的打开与关闭 文件的实 ...
- python中文本文件和二进制文件的区别_文本文件和二进制文件的区别
定义 广义的二进制文件即指文件,由文件在外部设备的存放形式为二进制而得名.狭义的二进制文件即除文本文件以外的文件.文本文件是一种由很多行字符构成的计算机文件.文本文件存在于计算机系统中,通常在文本文件 ...
- python087(文件—文件概念以及文本文件和二进制文件的区别)
文件的概念和作用 计算机的文件,就是存储某种长期储存设备上的一段数据 长期存储设备包括:硬盘.U盘.移动硬盘.光盘... 文件的作用 将数据长期保存下来,在需要的时候使用 CPU在使用数据时,要先将硬 ...
- 117. 请简述文本文件和二进制文件的区别
链接:https://www.nowcoder.com/questionTerminal/6e2a7411830d44b19b3dd1de7e7302db?toCommentId=1137079 来源 ...
- 详解文本文件和二进制文件区别
转自:https://blog.csdn.net/renyongwang1988/article/details/8050506 网上关于文本文件与二进制文件的文章很多,但遗憾的是,这些文章讲得都比较 ...
最新文章
- 有关GetPrivateProfileString的使用方法
- 4399积分小游戏_分数提交规则
- Ubuntu 安装 JDK 问题
- C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码
- P2714-四元组统计【数论,容斥】
- 让你的 Node.js 应用跑得更快的 10 个技巧
- 剑指offer(数值的整数次方)
- LINUX上安装openjdk
- 五款常见的bt磁力下载软件
- win10系统可以登录微信,但浏览器不能打开网页
- 十二星座的来历和希腊神话12主神简介
- 计算机管理 未分配磁盘,win7系统对未分配磁盘空间进行分区的操作方法
- Matlab 导入并显示png格式的透明图片
- a标签中herf的用法
- vue中对token的有效期的理解
- 不同网段之间访问网上邻居的方法
- Xrm.Utility.openEntityForm的使用
- 常识-java发送邮件函数+开启qq邮箱授权码
- 打破思维断层之KMP分析 - wsc - ITeye技术网站
- Java基础(一)Java语言概述及入门