Java小程序之哈夫曼树与文件压缩和解压缩(二)文件压缩篇
一、初识压缩与解压缩原理
压缩可以理解为:对文件的加密过程
解压可以理解为:对文件的解密过程
例如:
我 - a
是 - b
谁 - c
我是谁 -》 abc
我们都知道,计算机只能存储二进制数据,即计算机中存储的都是0和1;那么我们看的的a、b、c等英文字母和汉字在计算机中使怎么存储的呢?
这就涉及到了编码的问题了,英文用的编码是ASCII,即利用一个字节(8位,也就是8个0和1 组成的01串)来表示各种英文字母以及符号,例如a字母在ASCII编码中是97(十进制),在计算机中的存储是:01100001;所以一个英文字母或者符号只占一个字节;因为汉字众多,远远不止256个,所以汉字的编码需要用两个字节来编码,总共可编码2*16个汉字;所以一个汉字一半占两个字节;常用的汉字编码有UTF-8和GBK等;
现在比如在一个文件中存储有abaabc;那么计算机中存储的应该是01100001(a) 01100010 (b)01100001(a)01100001(a)01100010 (b)01100011 (c),一共占6个字节;如何利用哈夫曼树将这个文件进行压缩呢?构造哈夫曼树,首先的有权值,那么拿什么东西作为权值呢?