7个不稳定版本 (3个重大变更)
0.7.1 | 2021年11月21日 |
---|---|
0.7.0 | 2021年11月21日 |
0.6.5 | 2021年8月12日 |
0.5.0 | 2021年3月23日 |
0.1.1 | 2021年3月17日 |
#250 in 压缩
每月22次下载
430KB
403 行
rust-lzxpress
[MS-XCA]: Xpress压缩算法
简介
Xpress压缩算法有三个变体,都是为速度而设计的。最快的变体,Plain LZ77,实现了LZ77算法(UASDC)。一个较慢的变体,LZ77+Huffman,在LZ77数据上添加了一个Huffman编码过程。第三个变体,LZNT1,在第二个变体的Huffman编码过程中没有实现LZ77,但编码过程比Plain LZ77简单。
概述
此算法有效地压缩包含重复字节序列的数据。它不是为压缩图像、音频或视频数据而设计的。在压缩大小和CPU成本之间权衡,它强调降低CPU成本。
与协议和其他算法的关系
此算法不依赖于任何其他算法或协议。它是一种压缩方法,旨在具有最小的压缩和解压缩CPU开销。依赖于此算法的协议通常需要传输大量数据,这些数据不能被具有更好压缩率的另一个算法轻松预压缩。
适用性声明
此算法适用于任何传输大量易于压缩的文本数据(如HTML、源代码或日志文件)的协议。协议使用此算法来减少传输的位数。
此库
此软件包提供了一个简单接口,用于Microsoft Xpress压缩算法。Microsoft Xpress压缩算法更广为人知为LZXpress。此算法有效地压缩包含重复字节序列的数据。它不是为压缩图像、音频或视频数据而设计的。在压缩大小和CPU成本之间权衡时,它强调降低CPU成本。它主要被Microsoft功能或协议(如Microsoft Windows休眠文件、Microsoft SMB协议或甚至是Microsoft Windows 10压缩内存管理)使用。
decompress
/compress
是简单用例的易于使用的函数。
默认情况下,Windows上的LZXpress使用Plain LZ77算法。您可以在[MS-XCA]文档的2.4 Plain LZ77 Decompression Algorithm Details
和2.3 Plain LZ77 Compression Algorithm Details
部分中了解更多关于它的信息。
示例
Cargo.toml
[dependencies]
rust-lzxpress = "0.7.1"
main.rs
extern crate lzxpress;
use lzxpress;
const TEST_STRING: &'static str = "abcdefghijklmnopqrstuvwxyz";
const TEST_DATA: &'static [u8] = &[
0x3f, 0x00, 0x00, 0x00, 0x61, 0x62, 0x63, 0x64,
0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c,
0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74,
0x75, 0x76, 0x77, 0x78, 0x79, 0x7a ];
const TEST_LZNT1_COMPRESSED_DATA: &'static [u8] = include_bytes!("block1.compressed.bin");
fn main() {
let uncompressed = lzxpress::data::decompress(TEST_DATA).unwrap();
if let Ok(s) = str::from_utf8(&uncompressed) {
println!("{}", s);
}
let compressed = lzxpress::data::compress(TEST_STRING.as_bytes()).unwrap();
let uncompressed2 = lzxpress::data::decompress(compressed.as_slice()).unwrap();
if let Ok(s) = str::from_utf8(&uncompressed2) {
println!("{}", s);
}
// LZNT1
let uncompressed_lznt1 = lzxpress::lznt1::decompress(TEST_LZNT1_COMPRESSED_DATA).unwrap();
}