压缩小总结

项目背景:到目前为止最纠结的的一个项目,在寒假补课期间就整这个项目,但一直到补课完还没完成,一直到最近才完成的。
压缩步骤:
1、将要压缩的文件信息一个一个字节的读出来,并统计每个字节出现次数
2、以文件的每个字节的权值来构造哈夫曼树,并给每个字节进行哈夫曼编码。
3、将每个字节和其对应得哈夫曼编码存放进一个Map中。
4、将文件中的字节进行编码,转换成HuffMan编码,然后加入到String中
5、创建一个压缩文件,将码表写入文件。
解压缩:
其实他是压缩的一个逆过程,解压缩是一个读取文件的过程。要注意读取的顺序,按写入时的一个字节一个字节的读取就可以了。当读到最后一个字节后,我们注意把他还原成没有补0或1的情况。


2、读取、译码、写入的顺序问题

这三个操作的顺序关系到压缩和解压缩时所使用的中间数据存储的方法。也影响到压缩和解压缩用的时间长短。
如在压缩时选择先读取源文件所以字节,再得到每个字节对应的编码,再对所以编码进行转化,然后再写入目标文件中。这样的话,首先就需要储存源文件的每个字节,并且顺序明确,易按顺序获取。当选择数组时。对数组进行赋值时,尤其是在长度的确定上,所消耗的时间较多,然后还需要一个String储存字节对应Huffman编码,如果文件偏大的话,String就会很大,在内存中占用较大的空间。


我在这使用陈俊清的思路编写的,每读一个字节,将其转化为Huffman编码,然后加入到一个String中,然后判断String是否可以转化为Byte。这样的话,省去了存储字节的数组,只需要一个byte变量来暂存读取到的字节,String的长度最多也不会超过16位。这样在时间和空间上都降低了复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值