zoukankan      html  css  js  c++  java
  • 文本流与二进制流的区别

    . 基本知识:
    1. 二进制文件与文本文件的区别:
        将文件看作是由一个一个字节(byte) 组成的, 那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了,这就是两者的区别。

      接着,第二个问题就是文件按照文本方式或者二进制方式打开,两者会有什么不同呢?其实不管是二进制文件也好,还是文本文件也好,都是一连串的0和1,但是打开方式不同,对于这些0和1的处理也就不同。如果按照文本方式打开,在打开的时候会进行translate,将每个字节转换成ASCII码,而以按照二进制方式打开的话,则不会进行任何的translate

      最后就是文本文件和二进制文件在编辑的时候,使用的方式也是不同的。譬如,你在记事本中进行文本编辑的时候,你进行编辑的最小单位是字节(byte);而对二进制文件进行编辑的话,最小单位则是位(bit),当然我们都不会直接通过手工的方式对二进制文件进行编辑了

    从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种:
      ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:   
    ASCII码: 00110101   00110110   00110111   00111000   
                         ↓               ↓        ↓            ↓
    十进制码:       5     6            7       8   
    共占用4个字节。ASCII码文件可在屏幕上按字符显示,例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。
      二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为:01010110   01111000 只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。

      C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。  

    2. 文本模式(textmode)和二进制模式(binarymode)有什么区别?   
      流可以分为两种类型:文本流和二进制流。

      文本流是解释性的,最长可达255个字符,其中回车/换行将被转换为换行符“ ”,(如果以"文本"方式打开一个文件,那么在读字符的时候,系统会把所有的" "序列转成" ",在写入时把" "转成" ")。注:  一般会操作系统被翻译成"行的结束",即LF(Line-Feed);  会被翻译成"回车",即CR(Cariage-Return)

      而二进制流是非解释性的,一次处理一个字符,并且不转换字符。   

     

          对于文本文件的新行,在UNIX上,一般用 (LF)来表示,Mac上用 (CR)来表示,Windows上是用 (CR-LF)来表示。    

         通常,文本流用来读写标准的文本文件,或者将字符输出到屏幕或打印机,或者接受键盘的输入;而二进制流用来读写二进制文件(例如图形或字处理文档),或者读取鼠标输入,或者读写调制解调器。如果用文本方式打开二进制文件,会把“0D   0A”自动变换成“ ”来存在内存中;写入的时候反向处理。而二进制方式打开的话,就不会有这个过程。但是,Unicode/UTF/UCS格式的文件,必须用二进制方式打开和读写

      上述基础其实大可以略过,简言之,对用户来说:在 matlab 中存储成为二进制还是文本文件取决于fopen的方式,如果用wt,则存储为文本文件,这样用记事本打开就可以正常显示了;如果用w则存储为二进制文件,这样用记事本打开会出现小黑方块,要正常显示的话,可以用写字板或UltraEdit等工具打开。

  • 相关阅读:
    javaweb开发之解决全站乱码
    redis加入开机启动服务
    linux下安装memcache
    关于本地连接虚拟机(centos)里的mongodb失败问题
    oracle存储过程中返回一个程序集
    面向对象进阶(二)----------类的内置方法
    面向对象进阶(一)
    面向对象的三大特性之----------封装
    面向对象的三大特性之----------多态
    面向对象的三大特性之----------继承
  • 原文地址:https://www.cnblogs.com/King-Gentleman/p/4390246.html
Copyright © 2011-2022 走看看