一、文本文件和二进制文件的定义

  计算机上所有文件存储在存储设备上都是二进制的, 所以文本文件和二进制文件的区别并不是物理上的, 而是逻辑上的!简单来说, 文本文件是基于字符编码的文件, 常见的编码有ASCII编码和UNICODE编码等, 二进制是基于值编码的文件,  可以根据具体应用指定某个值是什么意思.

  从以上可以看出文本文件基本上是定长编码的, 基于字符, 每个字符在具体编码中所占位数是固定的, 比如ASCII是8个比特的编码, UNICODE一般占16个比特.而二进制文件可以看成是变长编码的, 因为是值编码, 多少个比特代表一个值完全由你决定, 大家对BMP文件比较熟悉, 就拿它举例子吧, 其头部是固定长度的14字节的文件头, 然后是40个字节的位图信息头.大家可以看出来了吧, 其编码是基于值的(不定长的, 2、4、8字节长的值都有), 所以BMP是二进制文件.

二、文本文件和二进制文件的存取

  用文本工具打开文件的过程如下, 拿记事本来说, 首先读取文件屋里上所对应的的二进制比特流(在实际存储中为二进制的), 然后按照你的解码方式来解释这个流, 将结果显示出来.比如你所选解码方式为ASCII(每个字符8比特), 接下来, 8个比特8个比特的去解释这个文件流, 例如"01000000_01000001_10000010_01000011"(下划线是为增加可读性而加, 实际中没有), 第一个8比特"01000000"按ASCII码来解码的话对应字符"A", 同理其他3个8比特分别解码为"BCD", 即这个文件流可以解释为"ABCD", 然后记事本就将这个"ABCD"显示在屏幕上.

  但是用记事本打开二进制文件, 会用既定的字符编码工作(如ASCII码), 所以当它打开二进制文件时, 出现乱码是很必然了!解码和译码不对嘛!比如文件流"00000000_00000000_00000000_00000001"可能在二进制文件中对应的是一个四字节的整数int 1, 在记事本里解释就变成了"NULL_NULL_NULL_SOH"这四个控制字符

  也就是不管二进制文件还是文本文件, 在存储时都是一连串的0和1, 但是打开方式不同, 这些0和1的处理就不同, 如果按文本方式打开, 打开的时候就会进行translate, 将每个字节转换成对应编码(ASCII、UNICODE等), 而以二进制方式打开的话则不会进行任何translate, 在编辑的时候文本最小单位为字节, 而二进制文件最小单位则是位!

三、文本文件和二进制文件的优缺点

  文本文件编码基于字符定长, 译码容易

  二进制文件编码变长, 所以灵活, 存储利用率要高, 译码难

四、C语言中文本读写和二进制读写

  在WINDOWS操作系统上, C语言的文本读写和二进制读写的差别仅仅体现在回车换行符的处理上

  文本方式写时, 每遇到一个"\n"(0AH换行符), 它将其转换成"\r\n"(0D0AH, 回车换行), 然后再写入文件, 当文本文件读取时, 它遇到一个"\r\n"将其反转换成"\n", 然后送到读缓冲区

  二进制读写时不存在任何转换, 直接将写缓冲区中数据写入文件

  总的来说, 从编程角度来说, C语言中文本或二进制读写都是缓冲区与文件中二进制流的交互, 只是文本读写时有translate和回车换行的转换, 所以当写缓冲区中无换行符时文本写和二进制写的结果是一样的, 同理, 当文件中不存在换行符时, 文本读和二进制读的结果一样

PHP-二进制文件和文本文件的区别的更多相关文章

  1. C++输出二进制文件和文本文件

    所谓二进制文件和文本文件对于字母而言没有什么不同,都是存储该字母的ASCII码值.能引起不同的是数字和一些排版用符号的格式. 数字在二进制文件中会存储该数字的值,而文本文件中则首先将该数字视为字符量, ...

  2. delphi 文件的读取(二进制文件和文本文件)

    http://blog.csdn.net/earbao/article/details/9174033

  3. 【c的文件操作】文本文件和二进制文件(内存映像)的不同 文件结尾判断feof , EOF

    查看 stdio.h 可以看到如下定义: #define  EOF  (-1) #define  _IOEOF  0x0010  #define  feof(_stream)  ((_stream)- ...

  4. MATLAB对于文本文件(txt)数据读取的技巧总结(经典中的经典)

    振动论坛原版主eight的经典贴http://www.chinavib.com/thread-45622-1-1.html MATLAB对于文本文件(txt)进行数据读取的技巧总结(经典中的经典)由于 ...

  5. 使用文本文件(.txt)进行数据存取的技巧总结(相当的经典)

    使用文本文件(.txt)进行数据存取的技巧总结(相当的经典) 使用文本文件(.txt)进行数据存取的技巧总结 由于本帖内容较多,部分转自他人的心得,因此,凡转贴的地方仅用“----转----”标注,原 ...

  6. MFC文件操作

    文件操作:二进制文件和文本文件的区别.二进制文件将数据在内存中存在的模式原封不动的搬到文件中,而文本文件是将数据的asc码搬到文件中.首先做一个读写文件的菜单,在CxxView里响应1.C的方式:fw ...

  7. unix文件操作函数

    1. fopen函数 #include <stdio.h> FILE *fopen(const char *path, const char *mode) 返回:文件顺利打开后,指向该流的 ...

  8. Java第8次实验(IO流)

    参考资料 本次作业参考文件 正则表达式参考资料 第1次实验 1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读) 参考文件:基础代码目录Student.jav ...

  9. 初学Python——文件操作第二篇

    前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...

随机推荐

  1. 基于非比較的排序:计数排序(countSort),桶排序(bucketSort),基数排序(radixSort)

    计数排序 条件:要排序的数组的元素必须是在一定范围的,比方是1~100.在排序之前我们必须知道数组元素的范围. 思路:顾名思义:就是用一个数组来计数的. 步骤: 1.用一个数组来计数count[ ], ...

  2. 深度学习研究组Deep Learning Research Groups

    Deep Learning Research Groups Some labs and research groups that are actively working on deep learni ...

  3. 【BZOJ】【3239】Discrete Logging

    BSGS BSGS裸题,嗯题目中也有提示:求a^m (mod p)的逆元可用快速幂,即 pow(a,P-m-1,P) * (a^m) = 1 (mod p) /******************** ...

  4. HTML5 Canvas,WebGL,CSS Shaders,GLSL的暧昧关系 【转】

    HTML5 Canvas,WebGL,CSS Shaders,GLSL的暧昧关系 这篇文章发布于 2011年10月10日,星期一,17:14,归类于 canvas相关. 阅读 58013 次, 今日 ...

  5. IOS之导航控制器传值

    UITableView有两种风格:UITableViewStylePlain和UITableViewStyleGrouped.这两者操作起来其实并没有本质区别,只是后者按分组样式显示前者按照普通样式显 ...

  6. liunx step by step(3)

    由于我的ubuntu是装载在virtualbox的虚拟机中,怎么实现其中的数据的共享,显得非常的必要:额,具体这么办. 1.安装增强功能.挂载光盘. 打开其相应的终端:fantlam@fantlam- ...

  7. ADB用法

    作为android开发人员,adb是常用的工具之一.具体怎么使用了. 1. 安装完ADB后(ADB的安装请参考<Android开发平台搭建及配置.doc>),用电脑USB连接机器,然后使用 ...

  8. Cognos利用DMR与文本对象设计中国式报表

    场景:详细对于接触Cognos的人来说,简单的拖拉报表.交叉表这个工作大家都可以完成,下面我们就来实现一下类似下面的效果. 下面简单的说一下实现过程: 利用Framework Manager创建DMR ...

  9. VS2008+Windows DDK 7的环境配置(二)

    在第一篇的基础上,进行如下的步骤,就可以编译出X64的驱动程序. (建议再另外建一个项目,这样避免混淆,因为x86和x64编译的有些编译选项是不同的.) 1. 安装VS2008 x64 build 组 ...

  10. 11个实用的CSS学习工具

    1. 盒子模型的幻灯片 通过3D转换效果产生的互动的幻灯片.按向左或向右箭头键切换,全屏观看会有更好的效果. 2. CSS Diner 通过一个简单的小游戏让你学习CSS selector,输入正确的 ...