PHP-二进制文件和文本文件的区别
一、文本文件和二进制文件的定义
计算机上所有文件存储在存储设备上都是二进制的, 所以文本文件和二进制文件的区别并不是物理上的, 而是逻辑上的!简单来说, 文本文件是基于字符编码的文件, 常见的编码有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-二进制文件和文本文件的区别的更多相关文章
- C++输出二进制文件和文本文件
所谓二进制文件和文本文件对于字母而言没有什么不同,都是存储该字母的ASCII码值.能引起不同的是数字和一些排版用符号的格式. 数字在二进制文件中会存储该数字的值,而文本文件中则首先将该数字视为字符量, ...
- delphi 文件的读取(二进制文件和文本文件)
http://blog.csdn.net/earbao/article/details/9174033
- 【c的文件操作】文本文件和二进制文件(内存映像)的不同 文件结尾判断feof , EOF
查看 stdio.h 可以看到如下定义: #define EOF (-1) #define _IOEOF 0x0010 #define feof(_stream) ((_stream)- ...
- MATLAB对于文本文件(txt)数据读取的技巧总结(经典中的经典)
振动论坛原版主eight的经典贴http://www.chinavib.com/thread-45622-1-1.html MATLAB对于文本文件(txt)进行数据读取的技巧总结(经典中的经典)由于 ...
- 使用文本文件(.txt)进行数据存取的技巧总结(相当的经典)
使用文本文件(.txt)进行数据存取的技巧总结(相当的经典) 使用文本文件(.txt)进行数据存取的技巧总结 由于本帖内容较多,部分转自他人的心得,因此,凡转贴的地方仅用“----转----”标注,原 ...
- MFC文件操作
文件操作:二进制文件和文本文件的区别.二进制文件将数据在内存中存在的模式原封不动的搬到文件中,而文本文件是将数据的asc码搬到文件中.首先做一个读写文件的菜单,在CxxView里响应1.C的方式:fw ...
- unix文件操作函数
1. fopen函数 #include <stdio.h> FILE *fopen(const char *path, const char *mode) 返回:文件顺利打开后,指向该流的 ...
- Java第8次实验(IO流)
参考资料 本次作业参考文件 正则表达式参考资料 第1次实验 1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读) 参考文件:基础代码目录Student.jav ...
- 初学Python——文件操作第二篇
前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...
随机推荐
- quartz 中JobExecutionContext的使用
假如execute方法中需要一些额外的数据怎么办?比如说execute 中希望发送一封邮件,但是我需要知道邮件的发送者.接收者等信息? 存在两种解决方案: 1.JobDataMap类: 每个Jo ...
- C语言union关键字,union和struct区别
union 关键字的用法与struct 的用法非常类似. union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间 ...
- 在Java Web程序中使用Hibernate
在Java Web程序中使用Hibernate与普通Java程序一样.本文中将使用Servlet和JSP结合Hibernate实现数据库表的增删改查操作. Web程序中,hibernate.cfg.x ...
- iOS开发-沙盒(sandbox)机制
苹果前天发的财报,貌似现在用ios系统的比以前又多了一些,但是大家的iPhone购买的渠道也是五花八门,有的从非正规渠道购买的iPhone里的操作系统已经被越狱过,越狱这个事情和Android的roo ...
- :Windows下RabbitMQ安装及入门
1.Windows下安装RabbitMQ需要以下几个步骤 (1):下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang. ...
- IntPtr 转 string
假设有 intPtr pBuffer 方法一: 直接使用Marshal.PtrToStringAnsi方法: string ss = Marshal.PtrToStringAnsi(pBuffer); ...
- Visual Studio 调试方法
1:命令窗口 CTRL + D + I,可以在立即窗口中写一些临时的代码 2:编辑并继续 选中下面的选项,可以让你在调试暂停中,修改代码,而不用重新启动, 3:执行 单步执行:F10 跳进方法:F11 ...
- IOS Xib使用——Xib表示局部界面
Xib文件是一个轻量级的用来描述局部界面的文件,在之前的文章讲解了为控制器添加Xib文件,本节主要讲解一下通过xib文件表示局部界面. <一> 创建Xib文件 Xib文件创建的时候是选择U ...
- jquery制作一个简单的轮播
效果图: 演示地址: http://ae6623.cn/demo/slider/index.html 思路: 利用css的定位属性 left 进行调整图片的显示,每次点击上一页下一页按钮的时候,-图片 ...
- 编程算法 - 二叉搜索树 与 双向链表 代码(C++)
二叉搜索树 与 双向链表 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目:输入一颗二叉搜索树, 将该二叉搜索树转换成一个排序的双向链表. 要求 ...