2 个不稳定版本
使用旧的 Rust 2015
0.2.0 | 2017年3月12日 |
---|---|
0.1.0 | 2016年2月28日 |
#440 in 压缩
5.5MB
1.5K SLoC
包含 (ELF exe/lib, 39KB) resources/canterbury/sum
Redux - 使用 Rust 编写的自适应算术压缩库
概述
此crate实现了自适应 算术编码算法。完全使用Rust编程语言编写。
链接
lib.rs
:
自适应算术压缩库。
此crate提供了标准 算术编码实现,可以使用自定义的符号概率模型。此crate提供两种自适应模型:AdaptiveLinearModel
和AdaptiveTreeModel
。自适应模型在编码每个符号时持续更新符号概率分布。
-
AdaptiveLinearModel
是一个简单但速度较慢的实现,主要供尝鲜和基准测试使用。 -
AdaptiveTreeModel
是基于Fenwick树的实现,建议在所有情况下使用此模型。
可以通过实现model::Model
特质来使用自定义模型(它可能是自适应的,也可能不是)。
示例
任何实现了std::io::Read
特质的字节流都可以进行编码和解码,输出可以是任何实现了std::io::Write
特质的对象。因此,可以处理文件或内存对象。
use redux::model::*;
let data = vec![0x72u8, 0x65u8, 0x64u8, 0x75u8, 0x78u8];
// Encode
let mut cursor1 = std::io::Cursor::new(&data);
let mut compressed = Vec::<u8>::new();
assert!(redux::compress(&mut cursor1, &mut compressed, AdaptiveTreeModel::new(Parameters::new(8, 14, 16).unwrap())).is_ok());
// Decode
let mut cursor2 = std::io::Cursor::new(&compressed);
let mut decompressed = Vec::<u8>::new();
assert!(redux::decompress(&mut cursor2, &mut decompressed, AdaptiveTreeModel::new(Parameters::new(8, 14, 16).unwrap())).is_ok());
assert_eq!(decompressed, data);