一、这里比较下常见变长编码规则:UTF-8和哈夫曼编码
编码:
- utf-8编码是对Unicode(万国码)进行编码,Unicode是固定不变的,属于标准。
- 哈夫曼编码是根据文本或者图片等等资源,先进行概率统计。得到概率值后,构造哈夫曼树,然后对叶子节点进行编码,动态生成该资源的码表。这个码表,不同资源一定是不同的。
解码:
- utf-8解码,只需要查询固定不变的Unicode码表,就能解码出原始文本
- 哈夫曼解码,需要查询哈夫曼编码自己独有的码表。这个码表,一定会随着网络通信传递给对方。比如:最常见的应用压缩。通过哈夫曼编码压缩资源,生成zip文件。这个zip文件格式,一定会包含哈夫曼编码的码表,以及编码压缩后的二进制数据。把整个zip通过网络传递给对方,对方拿到压缩后的二进制数据在解码。
二、一次压缩文件的传输过程
原始文本:abaaac
如果不压缩,直接通过utf-8编码,通过网络传递给对方。那么该文本的二进制长度:8bit * 6 = 48bit
如果使用哈夫曼编码进行压缩,再网络传输给对方。那么该文本需要先构建哈夫曼树,然后对叶子节点编码,得到码表。传输的时候,把码表和二进制同时传递给对方。对方解码的时候,查询码表,解码出来原始数据。
参考文章:https://zhuanlan.zhihu.com/p/123368046
哈夫曼编码压缩后,生成的码表table,用UTF-8编码进行网络传输。二进制数据就是哈夫曼编码的结果,不在utf-8编码了。这样:
整个哈夫曼编码压缩的长度 = 二进制数据长度 + 码表table长度









网友评论