文本模式/二进制模式 && 文本文件/二进制文件(编码系列-3)
来源:互联网 发布:知乎中文夹杂英文 编辑:程序博客网 时间:2024/06/10 04:58
一:文本模式与二进制模式的关系
无论你用哪种语言进行程序设计,也无论你用哪个函数进行文件操作(库函数也好,直接用操作系统的API也好),最终的文件打开的操作都是由操作系统来进行的,因此各种语言的情况从本质上来说都是相同的。用二进制模式打开一个文件的时候,文件本身的内容和你编写程序时用函数读到的内容完全相同(或者说和磁盘上的内容完全相同)。但是如果用了文本模式,那么操作系统内核在将文件内容传给上层程序(库函数,或者是你的程序)时,或者上层程序通过操作系统向文件写入内容时,操作系统都会预先进行一层预处理(或者说转义),具体过程依赖于操作系统的实现:
1. 在unix(包括Linux)系统上,一个程序从文件里读数据,它得到的数据就是数据本身,一个一个的字节;
2. 在windows系统上,一个文件可以用两种模式打开,二进制模式或者文本模式,在二进制模式下,表现的就像unix系统;然而在文本模式下,会有一个转换。是\n <-------> \r\n之间的转换。具体讲就是将回车符"\r\n"解释成"\n"(读出时),将"\n"解释成"\r\n"(写入时)。
总之,在unix系统上,打开文件只有二进制模式,在windows系统上,打开文件有文本模式和二进制模式两种。
二:文本文件与二进制文件的关系
(本段描述的文本文件特指用ASCII编码的文件)
将文件看作是由一个一个字节(byte) 组成的(ASCII编码的文件), 那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了。这就是两者的区别;接着,第二个问题就是文件按照文本方式或者二进制方式打开,两者会有什么不同呢?其实不管是二进制文件也好,还是文本文件也好,都是一连串的0和1,但是打开方式不同,对于这些0和1的处理也就不同。如果按照文本方式打开,在打开的时候会进行translate,将每个字节转换成ASCII码,而以按照二进制方式打开的话,则不会进行任何的translate;最后就是文本文件和二进制文件在编辑的时候,使用的方式也是不同的。譬如,你在记事本中进行文本编辑的时候,你进行编辑的最小单位是字节(byte);而对二进制文件进行编辑的话,最小单位则是位(bit),当然我们都不会直接通过手工的方式对二进制文件进行编辑了。
从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种:
ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:
ASCII码: 00110101 00110110 00110111 00111000
↓ ↓ ↓ ↓
十进制码: 5 6 7 8
共占用4个字节。ASCII码文件可在屏幕上按字符显示,例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。
二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为:00010110 00101110 只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。
- 文本模式/二进制模式 && 文本文件/二进制文件(编码系列-3)
- 文本模式 二进制模式& 文本文件 二进制文件
- 文本文件与二进制文件(编码系列-2)
- 【转】文本文件,二进制文件,文本读写,二进制读写
- 二进制文件(模式)与文本文件(模式)的区别
- 关于文本文件与二进制文件以及文本流与二进制流(终结版)
- 文本文件与二进制文件、文本方式与二进制方式
- 二进制文件文本文件和二进制数据
- python实现文本文件转二进制文件(二进制序列化)
- 文件读写的文本方式与二进制方式、文本文件与二进制文件之区别
- 文本文件和二进制文件;以文本方式打开和以二进制方式打开
- 文本模式,二进制模式, fwrite,fread
- 飘逸的python - 不要用二进制模式打开文本文件
- 可执行二进制文件与文本文件编码的区别
- 文本文件与二进制文件的编码差别
- 【Python】二进制文件与Base64编码文本文件转换
- 文本文件与二进制文件、Unicode字符编码
- 文本文件与二进制文件及编码关系
- Best Graphical Git Clients and Git Repository Viewers for Linux
- 页面滚动(scroll)有关JS操作
- 线程同步:ManualResetEvent和AutoResetEvent
- TPatch动态补丁系统(iOS)
- 8086 汇编语言 走迷宫之 左手法则
- 文本模式/二进制模式 && 文本文件/二进制文件(编码系列-3)
- NMEA GPRMC 格式图解,NMEA 工具的比较
- Mac显示隐藏文件
- 439. Ternary Expression Parser
- android service详解
- leetcode 219: Contains Duplicate II
- java知识体系整理
- android broadcast详解
- 228. Summary Ranges