2 个不稳定版本

使用旧的 Rust 2015

0.2.0 2017年3月12日
0.1.0 2016年2月28日

#440 in 压缩

MIT 许可证

5.5MB
1.5K SLoC

Rust 1K SLoC // 0.0% comments C 371 SLoC // 0.1% comments Common Lisp 81 SLoC

包含 (ELF exe/lib, 39KB) resources/canterbury/sum

Redux - 使用 Rust 编写的自适应算术压缩库

Build Status Crates.io

概述

此crate实现了自适应 算术编码算法。完全使用Rust编程语言编写。


lib.rs:

自适应算术压缩库。

此crate提供了标准 算术编码实现,可以使用自定义的符号概率模型。此crate提供两种自适应模型:AdaptiveLinearModelAdaptiveTreeModel。自适应模型在编码每个符号时持续更新符号概率分布。

  • 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);

无运行时依赖