读《程序是怎么跑起来的》第6章

文件就是字节数据的集合。用1字节(=8位)表示的字节数据有256种,用二进制数来表示的话,其范围就是0000 0000~1111 1111。如果文件中存储的数据是文字,那么该文件就是文本文件。如果是图形,那么该文件就是图像文件。在任何情况下,文件中的字节数据老师连续存储的。

RLE(Run Length Encoding,行程长度编码)算法,是把文件内容用“数据*重复次数”的形式来表示的压缩算法。RLE算法是一种很好的压缩方法,经常被用于压缩传真的图像等。因为图像文件本质上也是字节数据的集合体,所以可以用RLE算法来压缩。然而,在实际的文本文件中,同样字符多次重复重复出现的情况并不多见。虽然针对相同数据经常连续出现的图像、文件等,RLE算法可以发挥不错的效果,但它并不适合文本文件的压缩。不过,因为该压缩机制非常简单,因此使用RLE算法的程序也相对更容易编写。

哈夫曼算法,关键在于“多次出现的数据用小于8位的字节数来表示,不常用的数据则可以用超过8位的字节数来表示”。例如,在某一个文本文件中,A出现了100次左右,Q仅用到了3次。AQ都用8位表示时,原文件的大小就是100*8+3*8=824位,而假设A2位,Q10位来表示,压缩后的大小就是100*2+3*10=230位。但是在最后,不管是不满8位的数据,还是超过8位的数据,最终都要以8位为单位保存到文件中。这是因为磁盘是以字节来(8位)为单位保存数据的。莫尔斯编码,是通过“嗒嘀嗒嘀”这些长点和短点的组合来传递文本信息的。在实际的莫尔斯编码中,如果短点的长度是1,长点的长度就是3,短点和长点的间隔就是1。这里的长度指的是声音的长度。哈夫曼算法是指,为各压缩对象文件分别构造最佳的编码体系,并以该编码体系为基础来进行压缩。因此,用什么样式的编码(哈夫曼编码)对数据进行分割,就要由文件而定。用哈夫曼算法压缩过的文件中,存储着哈夫曼编码信息和压缩过的数据。总之,哈夫曼算法是按照“出现频率高的字符用尽量少的位数编码来表示”这一原则进行整理。我们把能还原到压缩前状态的压缩称为可逆压缩,无法还原压缩前状态的压缩称为非可逆压缩。

猜你喜欢

转载自www.cnblogs.com/gltks/p/10599498.html
今日推荐