2个版本
使用旧的Rust 2015
0.1.1 | 2018年2月11日 |
---|---|
0.1.0 | 2018年2月11日 |
#671 in 压缩
在mpq中使用
21KB
369 行
implode
纯Rust实现的DCL Implode算法。
目前,此crate仅支持解压缩。未来可能会根据deflate crate添加压缩功能。
lib.rs
:
PKWARE DCL Implode算法的实现。请注意,这与PKZIP中的Imploding算法不同。此实现基于zlib/contrib/blast.c中的实现,但使用查找表来解码Shannon-Fano码,这要快得多。此实现不使用PKWARE数据压缩库(PKWARE DCL)中的任何代码。
use implode::symbol::{Symbol, CodeTable, DEFAULT_CODE_TABLE, decode_bits};
use implode::exploder::Exploder;
use std::fs::File;
use std::io::Read;
use std::io::Write;
fn main()
{
let mut f = File::open("/path/to/input").expect("File open failed");
let mut buf = [0u8; FILE_SIZE];
f.read(&mut buf);
let mut exploder = Exploder::new(&DEFAULT_CODE_TABLE);
let mut ex = File::create("/path/to/output").expect("File create failed");
let mut cpos: u32 = 0;
let len = buf.len();
let mut iter = 0;
while !exploder.ended {
let abuf = &mut buf[cpos as usize .. len];
let x = exploder.explode_block(abuf).unwrap();
cpos += x.0;
//println!("{} {:?}",x.0, x.1);
let bf = x.1;
ex.write(bf);
iter+=1;
}
}