本章讲述的是如何压缩数据。文件压缩在发送邮件和转发文件时经常用到,或者是照片保存在计算机上时,也会压缩成JPEG格式,而文件的压缩机制是基础,也是必须掌握的知识。
首先,文件是数据存储在存储媒介中的一种形式。也就是说,无数数据存储在磁盘、内存等存储位置时的形式就形成了文件。而文件中这些数据的单位就是字节,在我们接触网络中应用程序或者文件时,xxMB,xxKB表示的内存大小,就是很多字节(Byte)组成的。用8位1字节表示的数据有256种,用二进制来表示范围就是00000000~11111111,重点是,文件中的字节数据都是连续储存的。
书中讲到一个算法,叫RLE算法(Run Length Encoding)。RLE是一个针对无损压缩的非常简单的算法。它用重复字节和重复的次数来简单描述来代替重复的字节。尽管简单并且对于通常的压缩非常低效,但它有的时候却非常有用。例如,图片的压缩格式JPEG就使用它。简单来说就是数据×重复次数来压缩字节从而压缩文件大小,如下图。
但是这种算法并不适合文本文件的压缩,因为文本文件中同样字符连续出现的部分并没有多少,总不至于一个文本文件全篇同样的词语连续出现多次吧。在使用RLE算法机制压缩文本时在每个字符后都会加上重复的次数,压缩后可能还会比之前的大,但是也可以避免,不以1个字节为单位查找重复次数,但是这样貌似就失去了这种算法的简单性的特点了。
书中讲到的第二种压缩方法叫哈曼夫算法,用到一种叫莫尔斯编码的东西,这种编码我们在电影里都有看到过,又叫摩斯电码,用长点短点的组合来传递信息,这种算法的最大特点就是多次出现的数据用小于8位的字节数来表示,不常用的数据可以用超过8位的字节数来表示,这种算法的特点就在于灵活。
莫尔斯编码也不是所有情况都适用,所以书中还讲到一种是使用二叉树构造编码体系,如图。
我的理解是,就类似于数学中的统计,根据数据出现的频率,再进行组合,最后形成一串哈曼夫编码,这种方法可以大大提高压缩比率。
书中还讲到两个概念,可逆压缩和非可逆压缩,顾名思义,可逆压缩是指压缩前后的文件数据没有丢失,非可逆压缩反之。
这就是我在第六章中学到的知识。