今天主要做的就是,将完成huffman编码的数据以二进制的形式写入文件中。这是个挺苦逼的活。
不过好在我以前玩过一段时间的单片机,所有能够较好的实现位运算,一位一位的将数据存放到缓冲区中,然后统一写入内存。
今天这个代码,怎么说呢,应该算是比较细致的活吧,毕竟这已经是接触到了计算机存储中存储单位最小的位了,在代码的控制上要比较小心,写代码前必须把问题想清楚,想不清楚,就很容易悲剧。
代码实现出来之后,原本大小为7.09kb的文件压缩后大小变成了4.86kb,这还是其中的信息头占了不少的内容,不然效率能更高一些。
当然了,我现在还不清楚我写进去的文件是否是正确的,毕竟现在还没解压出来,不过头部数据是没问题的,这个已经测试过了。
现在正在尝试着做解压,解压这块,不是很好处理。
解码其实很简单,就是根据头部信息,重新构建huffman树,然后把读出来的bit流进行依次的遍历,一旦遍历到叶子节点,就表明完成了解码,将叶子节点中的数据取出来添加到文件中就OK了。
但是,一位一位的向外读,这代码不是那么好写的……