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

  计算机上所有文件存储在存储设备上都是二进制的, 所以文本文件和二进制文件的区别并不是物理上的, 而是逻辑上的!简单来说, 文本文件是基于字符编码的文件, 常见的编码有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. Android网络通信Volley框架源代码浅析(二)

    尊重原创 http://write.blog.csdn.net/postedit/25921795 在前面的一片文章Volley框架浅析(一)中我们知道在RequestQueue这个类中,有两个队列: ...

  2. 纯文本抽出程序库DMC TEXT FILTER

    因需而生,红樱枫为文本转换市场领航 --纯文本抽出程序库DMC TEXT FILTER,从需求中把握平衡 在高度数字化的今天,数字图书馆已经成为非常多人查询资料的有效途径.然而即使在畅通的宽带搜寻中一 ...

  3. Mantis集成 LDAP 认证

    mantis的用户认证函数Authentication中相关有 $g_login_method MD5 LDAP PLAIN CRYPT CRYPT_FULL_SALT BASIC_AUTH Some ...

  4. Python kmean

    # -*- coding: utf-8 -*-from sklearn.cluster import KMeansfrom sklearn.externals import joblibimport ...

  5. IOS tableview 横向滚动

    1. UITableView 设置 CGRect tableViewRect = CGRectMake(0.0, 0.0, 50.0, 320.0);self.tableView = [[UITabl ...

  6. Windows 7系统垃圾清理自写程序

    系统清理.bat @echo off color 0a title windows7系统垃圾清理--- echo ★☆ ★☆ ★☆ ★☆ ★☆★☆★☆ ★☆ ★☆ ★☆ ★☆★ echo ★☆ ★☆ ...

  7. iOS:NSBundle的具体介绍

    NSBundle介绍:它是一个单例类,用来加载资源 bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-i ...

  8. OpenCV学习(30) 轮廓defects

    上一篇教程中,我们学习了如何计算轮廓的凸包,其实对一个轮廓而言,可能它的凸包和它本身是重合的,也有可能不是重合的.比如下面左边图像的轮廓本身就是凸包,而右边图像的轮廓则不是.我们可以通过函数bool ...

  9. Android中ActionBar及Overflow的显示

    最近在按照Android的API文档学习Android中actionbar的使用,Action bar 最基本的形式,就是为 activity 显示标题,并且在标题左边显示一个 app icon.在这 ...

  10. 未知高度的图片在div设置垂直居中

    方法一: 该方法是将外部容器的显示模式设置成display:table,img标签外部再嵌套一个span标签,并设置span的显示模式为display:table-cell,这样就可以很方便的使用ve ...