1 个不稳定版本
0.1.0 | 2021年2月28日 |
---|
#473 在 压缩 中
24KB
459 行
xSnappy
这是一个使用Rust编写的Snappy压缩算法库。它从Go实现移植,接口类似。
用法
压缩
use xsnappy::{max_encode_len, encode};
let src = "Jingle bell, jingle bell, jingle bell rock \
Jingle bells swing and jingle bells ring".as_bytes();
let mut dst = vec![0; max_encode_len(src.len())];
let size = encode(&mut dst, src);
dst.resize(size, 0);
println!("{:?}", dst);
解压缩
use xsnappy::{decode_len, decode};
use std::str::from_utf8;
let src = vec![83, 52, 74, 105, 110, 103, 108, 101, 32, 98, 101, 108, 108, 44, 32, 106, 90,
13, 0, 20, 32, 114, 111, 99, 107, 32, 29, 43, 40, 115, 32, 115, 119, 105, 110,
103, 32, 97, 110, 100, 46, 53, 0, 20, 115, 32, 114, 105, 110, 103];
let dec_len = match decode_len(&src) {
Ok(len) => len,
Err(err) => panic!("{}", err)
};
let mut dst = vec![0; dec_len];
match decode(&mut dst, &src) {
Ok(len) => {},
Err(err) => panic!("{}", err)
}
println!("{}", from_utf8(&dst).unwrap());
基准测试
基准测试在Intel i7-8700K上运行。
group cpp xsnappy
----------------------------------------------------------------------
compress/zflat00_html 189.189 M/s 860.49 M/s
compress/zflat01_urls 102.937 M/s 461.47 M/s
compress/zflat02_jpg 6.79115 G/s 1.8137 G/s
compress/zflat03_jpg_200 86.8056 M/s 185.71 M/s
compress/zflat04_pdf 1.6572 G/s 1.8927 G/s
compress/zflat05_html4 186.047 M/s 821.19 M/s
compress/zflat06_txt1 76.2514 M/s 345.15 M/s
compress/zflat07_txt2 73.0001 M/s 322.59 M/s
compress/zflat08_txt3 78.9303 M/s 360.85 M/s
compress/zflat09_txt4 67.2239 M/s 300.02 M/s
compress/zflat10_pb 231.617 M/s 1.0240 G/s
compress/zflat11_gaviota 105 M/s 559.65 M/s
decompress/uflat00_html 542.587 M/s 1.4985 G/s
decompress/uflat01_urls 347.698 M/s 892.58 M/s
decompress/uflat02_jpg 24.3476 G/s 17.148 G/s
decompress/uflat03_jpg_200 333.46 M/s 912.77 M/s
decompress/uflat04_pdf 4.78034 G/s 12.241 G/s
decompress/uflat05_html4 509.091 M/s 1.3875 G/s
decompress/uflat06_txt1 193.427 M/s 509.50 M/s
decompress/uflat06_txt2 176.779 M/s 488.38 M/s
decompress/uflat06_txt3 204.232 M/s 570.69 M/s
decompress/uflat06_txt4 165.199 M/s 445.71 M/s
decompress/uflat10_pb 766.616 M/s 2.0153 G/s
decompress/uflat11_gaviota 229.091 M/s 841.87 M/s