二进制文件和文本文件到底有什么区别

从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。

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

  二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的存储形式为: 00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示, 但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。 输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作“流式文件”。  

            什么是流(stream)?

流是程序输入或输出的一个连续的字节序列,设备(例如鼠标、键盘、磁盘、屏幕、调制解调器和打印机)的输入和输出都是用流来处理的。在C语言中,所有的流均以文件的形式出现----不一定是物理磁盘文件,还可以是对应于某个输入/输出源的逻辑文件。C语言提供了5种标准的流,你的程序在任何时候都可以使用它们,并且不必打开或关闭它们。以下列出了这5种标准的流。
------------------------------------------------
名称 描 述 例 子
------------------------------------------------
stdin 标准输入 键盘
stdout 标准输出 屏幕
stderr 标准错误 屏幕
stdprn 标准打印机 LPT1端口
stdaux 标准串行设备 COM1端口
------------------------------------------------
需要注意的是,stdprn和stdaux并不总是预先定义好的,因为LPT1和COM1端口在某些操作系统中是没有意义的,而stdin,stdout和stderr总是预先定义好的。此外,stdin并不一定来自键盘,stdout也并不一定显示在屏幕上,它们都可以重定向到磁盘文件或其它设备上。

文本模式(textmode)和二进制模式(binarymode)有什么区别?

流可以分为两种类型:文本流和二进制流。文本流是解释性的,最长可达255个字符,其中回车/换行将被转换为换行符“/n”,(如果以"文本"方式打开一个文件,那么在读字符的时候,系统会把所有的"/r/n"序列转成"/n",在写入时把"/n"转成"/r/n"            archim 's opinion    )。二进制流是非解释性的,一次处理一个字符,并且不转换字符。
通常,文本流用来读写标准的文本文件,或者将字符输出到屏幕或打印机,或者接受键盘的输入;而二进制流用来读写二进制文件(例如图形或字处理文档),或者读取鼠标输入,或者读写调制解调器。

如果用文本方式打开文件,会把“0D 0A”自动变换成“/n”来存在内存中。写入的时候反向处理。    而二进制方式打开的话,就不会有这个过程。

但是,Unicode/UTF/UCS格式的文件,必须用二进制方式打开和读写。

你可能感兴趣的:(JAVA)