Java中什么是字符文件,什么是字节文件?

来源:互联网 发布:linux 下载php源码 编辑:程序博客网 时间:2024/06/08 18:16
理论上没有本质区别。

所有的文件都是以二进制存储的,文件只有“文本文件”和“不是文本文件”这两种。只是因为里面的数据不同或者解析数据的方式不同而导致你看到的结果不同。下面给你非常详细的解释:

“字符文件”确切的说法应该是文本文件。说过了,它也是以二进制存储的,并且是连续的(一大串 1 和 0 组成的数字,没有任何标记隔开),而在读取的时候由程序把它断开。最简单的例子,扩展的 ASCII 码存储的文本文件,其中每个字符占 8 位(正好是一个字节),那么在读取此文件的时候程序会 8 位一读,也就是 1 个字节(字符)一读。读完 8 位再读下 8 位,直达文件末尾或者手动结束。“流”这个概念就是这么来的。每次读入一个字符就可以称为字符输入流,但本质上是一个比特(位)流。

然后“字节文件”,当然你可以这么叫,不过要和文本文件区分的话一般叫“二进制文件”,虽然本质上没区别。所有的文件都是二进制文件,其实所有的文件也都是字节文件。因为字节也基本是数据的最小单位了(比特当然更小,但是比特是计算机处理数据时的单位,字节是最小数据块的单位)。上面的 ASCII 的“文本文件”是一种特殊的字节文件,每个数据块就是一个字节。而一般的字节文件中,数据块可以是任何数据类型,可以是 16 位的 short,32 位的 int,也可以是 32 位的 float,等等类型,一般叫“二进制文件”。读此类文件的时候必须要对应好,该是 short 的地方就读入 2 个字节,该是 int 的地方就该读入 4 个字节,一旦错了所有后面的数据就可能都读错了。这个“流”你可以随意称呼,可以叫“数据流”,因为各种类型的数据都有,只能统称为“数据”,但本质上就是二进制的比特流。

另外,你说记事本打开乱码的是“字节文件”,首先上面说过了,文本文件本身是一种特殊的字节文件;其次记事本打开只要不是乱码的必然是文本文件,因为它显示的是良好的文本,而记事本打开是乱码的不一定就不是文本文件,可能是编码格式的原因。这个又牵扯到编码格式,太多了,实在没办法些这里,你到我空间有编码格式的文章可以看。
原创粉丝点击