原理:
利用哈夫曼树对文件中的字符进行重新编码,也就是根据文件中出现的所有字符的频率来创建哈夫曼树,然后生成哈夫曼编码来对文件中的所有字符进行重新编码,使文件中出现频率高的字符的编码变短,从而实现文件的压缩存储。相应的,解压过程也就是对文件按照哈夫曼编码的译码过程。
分析:
无论是什么文件,它最终都是以二进制形式存储到硬盘中的。所以,我们在压缩文件时,可以将其按char 字符型来逐个读取,并记录该字符的出现频率,这样就可以根据字符及其频率表来创建哈夫曼树。
压缩文件的一个难点在于,对字符重新编码后,新的字符编码必须以bit位的形式存入文件,但我们能操作的最小单位为1个字节,所以需要将新的编码用一个unsigned char 类型字符来间接储存。
例如,假设字符 'a' 的哈夫曼编码为 "01001",在存储时就可以 先声明一个 unsigned char 类型的数据 ch,并将其初始值设置为0 ,然后对 'a' 的编码进行遍历。
第一位编码为 '0' ,所以对 ch 左移一位:ch = ch << 1 ;