14个版本
0.3.4 | 2020年11月11日 |
---|---|
0.3.3 | 2020年11月10日 |
0.2.3 | 2020年11月5日 |
0.2.0 | 2020年10月20日 |
0.1.4 | 2020年10月16日 |
#586 在 算法
1,931 每月下载次数
在 12 个crate(直接使用2个)中使用
240KB
7K SLoC
httlib-huffman
该crate实现了用于处理规范Huffman的函数,以处理HPACK格式,并在HTTP/2中公开了一个简单的API,用于根据HPACK规范进行HTTP/2头字符串的编码和解码。
HTTP/2的头部压缩格式,称为HPACK,预计将Huffman算法用于编码头部字面值。这有助于减少每个Web请求和响应中传输的数据量。
Huffman编码是一种特定的最优前缀码,通常用于无损数据压缩。寻找或使用此类代码的过程是通过David A. Huffman开发的Huffman编码算法进行的。Huffman算法的输出可以视为用于编码源符号(如文件中的字符)的可变长度码表。算法从源符号每个可能值的估计概率或频率(权重)中推导出此表。与其他熵编码方法一样,常见的符号通常使用比不常见的符号更少的位数来表示。Huffman的方法可以高效实现,如果这些权重已排序,则找到代码的时间与输入权重的数量成正比。
HPACK 压缩包含一个预先创建的用于编码 ASCII 字符到 Huffman 序列的 规范 Huffman 码表。一个 规范 Huffman 码是一种具有独特性质的特定类型的 Huffman 码,它可以以一种非常紧凑的方式描述。在上述表中包含了每个 ASCII 字符的 Huffman 码,长度可达 32 位(4x8 字段,值为 0 或 1),以二进制整数形式呈现,对齐到最高有效位(MSB 是最左边的位)。
每个模块都更详细地介绍了这个主题,因此请查看代码的其他部分以了解更多信息。
用法
编码示例
use httlib_huffman::encode;
let mut dst = Vec::new();
let text = "Hello world!".as_bytes();
encode(&text, &mut dst).unwrap();
解码示例
use httlib_huffman::{DecoderSpeed, decode};
let speed = DecoderSpeed::ThreeBits;
let mut dst = Vec::new();
let src = vec![135];
decode(&src, &mut dst, speed).unwrap();
文章
许可:MIT