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

  计算机上所有文件存储在存储设备上都是二进制的, 所以文本文件和二进制文件的区别并不是物理上的, 而是逻辑上的!简单来说, 文本文件是基于字符编码的文件, 常见的编码有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. 怎么上传自己的代码/项目到自己的github仓库上

    创建新的git仓库   设置新仓库   创建完成后   复制git地址   现在已经有window git客户端了(地址:https://desktop.github.com/),但还是建议用git命 ...

  2. Android事件分发机制源码分析

    Android事件分发机制源码分析 Android事件分发机制源码分析 Part1事件来源以及传递顺序 Activity分发事件源码 PhoneWindow分发事件源码 小结 Part2ViewGro ...

  3. 【BZOJ】【2200】【USACO 2011 Jan】道路和航线

    做了一天…… TLE:数组开小了-_-#道路是有50000的,双向要乘二.(我特么怎么想的就以为是树了……) WA:一些大点都WA了,小点都过了.好纠结…… AC了QAQ,不知道为什么,在并查集合并的 ...

  4. [Python爬虫]煎蛋网OOXX妹子图爬虫(1)——解密图片地址

    之前在鱼C论坛的时候,看到很多人都在用Python写爬虫爬煎蛋网的妹子图,当时我也写过,爬了很多的妹子图片.后来煎蛋网把妹子图的网页改进了,对图片的地址进行了加密,所以论坛里面的人经常有人问怎么请求的 ...

  5. App优化 StrictMode 严格模式

    StrictMode简介 StrictMode最常用来捕捉应用程序的主线程,它将报告与线程及虚拟机相关的策略违例.一旦检测到策略违例policy violation,你将获得警告,其包含了一个栈tra ...

  6. 解决spark中遇到的数据倾斜问题

    一. 数据倾斜的现象 多数task执行速度较快,少数task执行时间非常长,或者等待很长时间后提示你内存不足,执行失败. 二. 数据倾斜的原因 常见于各种shuffle操作,例如reduceByKey ...

  7. Pylons架构网站开发从0到1

    首先说明下这里的从0到1指的是从没有听说过pylons到开发出一个看上去还不错的网站.一个月前,我没有听说过也不知道什么是pylons,HTML只知道一些标签,JavaScript也不怎么懂,由于只倾 ...

  8. 申请红帽企业版Linux开发者订阅

    导读 注册成为开发者计划的成员现在可以得到一套免费的 Red Hat Enterprise Linux 许可证,RHEL 开发套件将为程序员提供一个构建企业应用的稳定发展平台.红帽开发订阅成员还可以免 ...

  9. 如何在Linux中发现IP地址冲突

    导读 你们都知道什么是IP地址,是吧?它们被分配给网络上的设备来代表它们.它们通过DHCP服务器分配并且会经常改变.现在有两种IP地址.动态的一种会经常改变(几天一次),而静态的就如它的名字那样是静态 ...

  10. WordPress后台的文章、分类,媒体,页面,评论,链接等所有信息中显示ID并将ID设置为第一列

    WordPress后台默认是不显示文章.分类等信息ID的,查看起来非常不方便,不知道Wp团队出于什么原因默认不显示这个但可以使用Simply Show IDs插件来实现 不使用插件,其他网友的实现: ...