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

  计算机上所有文件存储在存储设备上都是二进制的, 所以文本文件和二进制文件的区别并不是物理上的, 而是逻辑上的!简单来说, 文本文件是基于字符编码的文件, 常见的编码有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. java静态初始化数据

    1.通过静态成员变量和静态方法组合(比较单一) public class A{ private static String t=getInit(); private static String get ...

  2. DAHON 美国大行

    DAHON美国大行1982年创立于美国加州,多年来一直率先推动环保的代步工具——折叠自行车.创新是大行的生命,从韩氏兄弟发明了全世界第一辆小到能够放进火车座椅底下的折叠自行车起,大行就开启了不断向前的 ...

  3. maven+jenkins+jmeter性能测试:maven把项目依赖拷贝到项目指定位置

    先上pom.xml配置: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...

  4. CentOS 加载/挂载 U盘 (转)

    原文链接:CentOS 加载/挂载 U盘 Linux如何加载(优)U盘 1,以root用户登陆    先加载USB模块 modprobe usb-storage    用fdisk -l 看看U盘的设 ...

  5. C语言项目:学生成绩管理系统

    C语言项目:学生成绩管理系统    1.数据结构:学生信息:学号.姓名.年龄.性别.3课成绩    2.功能:   (1)增加学生记录    (2)  删除学生记录    (3)  查找学生信息(学号 ...

  6. Objective-C:三种文件导入的方式比较

    三种文件导入的方式比较:   类的前项声明@class.import.include:   1.采用@class 类名的方式,它会告诉编译器有这么一个类,目前不需要知道它内部的实例变量和方法是如何定义 ...

  7. CoreAudio实现录音播音和扬声器听筒模式的切换

    本例子使用Core Audio实现类似于微信的音频对讲功能,可以录音和播放并且实现了听筒模式和扬声器模式的切换.录音主要使用AVAudioRecorder类来实现录音功能,播放则使用AVAudioPl ...

  8. 数学图形之Breather surface

    这是一种挺漂亮的曲面图形,可惜没有找到太多的相关解释. In differential equations, a breather surface is a mathematical surface ...

  9. 解析XML并将信息封装到对象中

    [person.xml]要解析的内容 <?xml version="1.0" encoding="UTF-8"?> <students> ...

  10. NYOJ 113 字符串替换(C++STL解法)

    字符串替换 时间限制:3000 ms  |            内存限制:65535 KB 难度:2 描写叙述 编写一个程序实现将字符串中的全部"you"替换成"we& ...