文件的大小之所以用XXKB,XXMB等来表示,就是因为文件是以字节为单位来存储的。文件就是字节数据的集合。如果文件中存储的数据是文字,那么该文件就是文本文件。如果是图形,那么该文件就是图像文件。在任何情况下,文件中的字节数据都是连续存储的。
由于半角字母中,一个字符是作为一个字节的数据被保存在文件中的。只要能使文件小于十七字节,我们就可以使用任何压缩方法。把文件内容用“数据×重复次数”的形式来表示的压缩方法称为RLE算法。RLE算法是一种很好的压缩方法,经常被用于压缩传真的图像等。因为图像文件本质上也是字节数据的集合体,所以可以用RLE算法来压缩。
在实际的文本文件中,同样字符多次重复出现的情况并不多见。虽然针对相同数据经常连续出现的图像、文件等,RLE算法可以发挥不错的效果,但它并不适合文本文件的压缩。不过,因为该压缩机制非常简单,因此使用 RLE算法的程序也相对更容易编写。
哈夫曼算法是哈夫曼于1952年提出来的压缩算法。 日本人比较常用的压缩软件LHA,使用的就是哈夫曼算法。 文本文件是由不同类型的字符组合而成的, 而且不同的字符出现的次数也是不同的。不过有一点需要注意,不管是不满8位的数据,还是超过8位的数据,最终都要以8位为单位保存到文件中。 这是因为磁盘是以字节(8位)为单位来保存数据的。 为了实现这一处理,压缩程序的内容会复杂很多,不过作为回报, 最终得到的压缩率也是相当高的。 为了更好地理解哈夫曼算法,先
来看一下莫尔斯编码。莫尔斯编码是 1837年莫尔斯提出的。莫尔斯编码不是通过语言,而是通过 “嗒嘀嗒嘀”这些长点和短点的组合来传递文本信息的。实际上,根据字符种类的不同, 莫尔斯电码符号的长度也是不同的。莫尔斯编码把 一般文本中出现频率高的字符用短编码来表示。
哈夫曼算法是指,为各压缩对象文件分别构造最佳的编码体系, 并以该编码体系为基础来进行压缩。因此,用什么样式的编码(哈夫曼编码 )对数据进行分割,就要由各个文件而定。用哈夫曼算法压缩过的文件中, 存储着哈夫曼编码信息和压缩过的数据。而在哈夫曼算法中, 通过借助哈夫曼树构造编码体系,即使在不使用字符区分符号的情况下, 也可以构建能够明确进行区分的编码体系。也就是说,利用哈夫曼树后, 就算表示各字符的数据位数不同,也能够做成可以明确区分的编码。因此, 只要掌握了哈夫曼树的制作方法,并用程序将其完成, 就可以借助哈夫曼算法实现文件压缩了。不过,与RLE算法相比,程序的内容要复杂很多。
而从用哈夫曼算法压缩过的文件中读取数据后,就会以位为单位对该数据进行排查, 并与哈夫曼树进行比较看是否到达了目标编码 ,这就是为什么哈夫曼算法可以对数据进行区分的原因。
图像文件的使用目的通常是把图像数据输出到显示器、打印机等设备上。 图像文件还可以使用与前文介绍的RLE算法、 哈夫曼算法不同的其他压缩算法。这是因为,多数情况下, 并不要求压缩后的图像文件必须还原到与压缩前同等的质量。我们把能还原到压缩前状态的压缩称为可逆压缩, 无法还原到压缩前状态的压缩称为非可逆压缩。