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等工具打开。

  • 相关阅读:
    The Python Standard Library
    Python 中的round函数
    Python文件类型
    Python中import的用法
    Python Symbols 各种符号
    python 一行写多个语句
    免费SSL证书(https网站)申请,便宜SSL https证书申请
    元宇宙游戏Axie龙头axs分析
    OLE DB provider "SQLNCLI10" for linked server "x.x.x.x" returned message "No transaction is active.".
    The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "xxx.xxx.xxx.xxx" was unable to begin a distributed transaction.
  • 原文地址:https://www.cnblogs.com/King-Gentleman/p/4390246.html
Copyright © 2011-2022 走看看