先说结论:

二进制文件和文本文件都是按照二进制存储的,只不过文本文件是把一个字节一个字节解读成字符,而二进制文件可以任意定义解读方式。


在windows上,用记事本就可以打开文本文件了,但要打开二进制文件需要对应的二进制文件解码器,因此,文本文件是更为大家所熟知的文件形式,而二进制文件的优点在于它的输入输出都省去了转换的过程,而且更省空间。

文件的读写过程:

磁盘— 文件缓冲区 — 应用程序的内存空间

我们说的,“文本文件和二进制文件没有区别”,实际上针对的是第一个过程,那么打开方式不同,为何显示内容就不同呢?这个区别实际上是第二个过程造成的。

我们说文本文件是特殊的二进制文件,是因为文本文件实际上的解释格式已经确定了:ASCII或者Unicode编码。这些都是针对文本的编码格式。二进制文件则可以有各种存储结构。

举个实例:

file = open('test.txt', 'wb')  # 创建test.txt文件
file.write(b'\x41\x42')  # 直接向其写入十六进制数据0x41和0x42(字符串AB)
file.close()  # 关闭文件(相当于保存)
# 此时用任意文本编辑器打开test.txt,你可以看到字符串AB出现在屏幕上

字符A和B在ASCII编码格式中对应的十六进制数字分别是0x41和0x42(二进制分别为1000001和1000010)。我可以直接创建一个文件,直接向里面写入十六进制数据0x41和0x42(注意是直接写入数据,不是一般的文本输入),保存之后使用一般的文本编辑器打开,我就能看到字符串AB显示在屏幕上了。


文本文件是字符编码的文件,二进制文件是对值编码的文件。

计算机在物理内存上面存放的都是二进制,所以文本文件和二进制文件的主要区别是在逻辑上的而不是物理上的。而从文件的编码方式来看,文件可以分为文本文件和二进制文件。文本文件是基于字符编码的文件,常见的有ASCII、Unicode等,二进制文件是基于值编码的文件,可以看成是变长编码,你可以根据自己的需要,决定多少个比特代表一个值。

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

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

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

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

文本文件的打开方式和二进制文件打开方式的区别:

(1)文本模式中回车被当成一个字符’\n’,在文件中如果读到0x1B,文本模式会认为这是文件结束符,会按照一定方式对数据做相应的转换。

(2)二进制模式中’\n’会被认为是两个字符0x0D,0x0A;在读到0x1B时,二进制模式不会对文件进行处理。

参考文章:https://blog.csdn.net/double_happiness/article/details/71123809


二进制文件是包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件。一般是可执行程序、图形、图象、声音等等文件。

文本文件(也称为ASCII文件):它的每一个字节存放的是可表示为一个字符的ASCII代码的文件。它是以 “行”为基本结构的一种信息组织和存储方式的文件,可用任何文字处理程序阅读的简单文本文件。

文本工具打开一个文件的过程是怎样的呢?拿记事本来说,它首先读取文件物理上所对应的二进制比特流,然后按照你所选择的解码方式来解释这个流,然后将解释结果显示出来。一般来说,你选取的解码方式会是ASCII码形式(ASCII码的一个字符是8个比特),接下来,它8个比特8个比特地来解释这个文件流。例如对于这么一个文件流”01000000_01000001_01000010_01000011”(下划线”_”,为了增强可读性手动添加的),第一个8比特”01000000”按ASCII码来解码的话,所对应的字符是字符”A”,同理其它3个8比特可分别解码为”BCD”,即这个文件流可解释成“ABCD”,然后记事本就将这个“ABCD”显示在屏幕上。

用记事本打开二进制文件与上面的情况类似。记事本无论打开什么文件都按既定的字符编码工作(如ASCII码),所以当他打开二进制文件时,出现乱码也是很必然的一件事情了,解码和译码不对应嘛。例如文件流”00000000_00000000_00000000_00000001”可能在二进制文件中对应的是一个四字节的整数int 1,在记事本里解释就变成了”NULL_NULL_NULL_SOH”这四个控制符。

参考文章:
https://blog.csdn.net/qq_27736025/article/details/50725598
https://www.cnblogs.com/pengwangguoyh/articles/3223072.html

二进制文件、文本文件相关推荐

  1. 二进制文件文本文件和二进制数据

    我们知道计算机是用二进制来做运算处理的,所以所有存储在计算机里面的东西都是二进制的. 我也知道这句话,但为什么总是听到别人说"二进制"文件和"文本"文件呢? 按 ...

  2. ASCII码二进制文件文本文件

    ASCII码 通常说二进制.十进制和十六进制 一个字节有八位,最简单的ASCII码占用7位,最高位可以用来作为奇偶校验位帮助校验传输错误.ASCII码的目的是把文本符号与数值信号相关联 这两者只是在编 ...

  3. (C/C++)(读/写)(二进制文件/文本文件)

    C++写二进制文件 std::ofstream fout("a.dat", std::ios::binary); int nNum = 20; std::string str(&q ...

  4. python087(文件—文件概念以及文本文件和二进制文件的区别)

    文件的概念和作用 计算机的文件,就是存储某种长期储存设备上的一段数据 长期存储设备包括:硬盘.U盘.移动硬盘.光盘... 文件的作用 将数据长期保存下来,在需要的时候使用 CPU在使用数据时,要先将硬 ...

  5. Python文件操作-文本文件、二进制文件、csv文件的读取写入、OS、shutil、CSV模块、常用字符编码

    Python文件操作 文本文件和二进制文件 文件操作相关模块 open()创建文件对象 文件对象的常用属性和方法 pickle 序列化 文本文件读取和写入 文本文件写入步骤 write()/write ...

  6. 基于存储的C语言文件操作常规问题分析(文本文件与二进制文件)

    基于存储的C语言文件操作常规问题分析(文本文件与二进制文件) 问题描述 文本文件与二进制文件 数据写入文本乱码问题 fopen和open 流式文件操作常用函数 直接I/O文件操作常用函数 问题描述 我 ...

  7. 文件------概念、基本操作、打开文件的方式、按行读取文件内容、复制文件、文件/目录的常用管理操作、文本文件的编码格式、练习1-4

    文件的概念 文件的概念 计算机的文件,就是存储在某种长期储存设备上的一段数据 长期存储设备包括:硬盘.U盘.移动硬盘.光盘... 文件的作用 将数据长期保存下来,在需要的时候使用 文件的存储方式 在计 ...

  8. Python-文件和数据格式化

    文件的使用 >文件的类型 文件的理解:文件是数据的抽象和集合 -文件时存储在辅助存储器上的数据序列 -文件是数据存储的一种形式 -文件展现形态:文本文件和二进制文件 文本文件vs.二进制文件 - ...

  9. python学习手册条件-Python学习手册(第4版)pdf

    Python学习手册(第4版) 内容简介 <Python学习手册(第4版)>学习Python的主要内建对象类型:数字.列表和字典.使用Python语句创建和处理对象,并且学习Python的 ...

  10. 字节流转化为文件流_JAVA IO分析一:File类、字节流、字符流、字节字符转换流...

    因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...

最新文章

  1. entjs 键盘监听
  2. 『追捕盗贼 Tarjan算法』
  3. # 日期待t_2020最值得期待的几款新车
  4. “后完美日记”时代,橘朵、花知晓、funnyelves们还有机会吗?
  5. 深度学习笔记第二门课 改善深层神经网络 第一周:深度学习的实践层面
  6. 第十七篇 计算机组成原理
  7. 关于SAP云平台的Identity Authentication tenant
  8. Koa框架——coderhub实战
  9. Typora 常用技巧
  10. python调用百度语音实时转为文字_百度语音转文字 (Python)
  11. jquery跨域Ajax请求
  12. 在windows下搭建SVN服务器
  13. bzoj 1623: [Usaco2008 Open]Cow Cars 奶牛飞车(贪心)
  14. 作为一个技术人,我究竟要什么?
  15. windows如何导出组策略结果集 (RSOP)
  16. 【物联家居】第四章:传输协议--mqtt配置与测试
  17. 新能源车辆越来越多了,车牌识别核心技术
  18. 10种方式卸掉感情垃圾
  19. jmeter线程组之jp@gc - Ultimate Thread Group
  20. 什么是Java 西安尚学堂

热门文章

  1. ue4渲染速度太慢_[UE4]性能优化指南(程序向)
  2. EJB3 Persistence 对象
  3. 思腾合力-SCM集群 通过ssh上传大内存数据集至集群文件系统内
  4. win10/win11家庭版解压缩时,出现错误代码0x80004005的解决办法
  5. 疯狂Kotlin讲义学习笔记07章:面向对象(上)对象,中缀,解构,幕后字段、属性,延迟初始化,访问控制符,构造器,继承,重写,super限定,重写,多态,is类型检查,as强制类型转换
  6. 什么是B端产品和C端产品?
  7. 这里有一份最新的课程分享清单,收集好久了,请查收
  8. 在线json服务器,json服务器
  9. js将图片或者文件转成base64格式的两种方法
  10. c 之父 java is not_Java之父评价C语言之父:我用尽了形容词