Skip to content

Compression Options

zesven supports multiple compression methods with configurable levels.

Setting Options

Use WriteOptions to configure compression:

rust
use zesven::{Writer, WriteOptions, Result};

fn main() -> Result<()> {
    let options = WriteOptions::new()
        .level(7)?;  // 0 = store, 9 = maximum compression

    let writer = Writer::create_path("archive.7z")?
        .options(options);

    Ok(())
}

Compression Levels

LevelDescriptionSpeedRatio
0Store (no compression)FastestNone
1-3Fast compressionFastLow
4-6Normal compressionMediumMedium
7-9Maximum compressionSlowHigh
rust
use zesven::{WriteOptions, Result};

fn main() -> Result<()> {
    // Fast compression for large files
    let fast = WriteOptions::new().level(1)?;

    // Maximum compression for final archives
    let maximum = WriteOptions::new().level(9)?;

    // Balanced (default)
    let balanced = WriteOptions::new().level(5)?;

    Ok(())
}

Compression Methods

LZMA2 (Default)

The default and most commonly used method:

rust
use zesven::{Writer, WriteOptions, codec::CodecMethod, Result};

fn main() -> Result<()> {
    let options = WriteOptions::new()
        .method(CodecMethod::Lzma2)
        .level(7)?;

    let writer = Writer::create_path("archive.7z")?
        .options(options);

    Ok(())
}

LZMA

Original LZMA algorithm:

rust
use zesven::{WriteOptions, codec::CodecMethod, Result};

fn example() -> Result<()> {
    let options = WriteOptions::new()
        .method(CodecMethod::Lzma)
        .level(7)?;
    Ok(())
}

Deflate

Compatible with ZIP, faster but lower ratio:

rust
use zesven::{WriteOptions, codec::CodecMethod, Result};

fn example() -> Result<()> {
    let options = WriteOptions::new()
        .method(CodecMethod::Deflate)
        .level(6)?;
    Ok(())
}

BZip2

Good for text files:

rust
use zesven::{WriteOptions, codec::CodecMethod, Result};

fn example() -> Result<()> {
    let options = WriteOptions::new()
        .method(CodecMethod::BZip2)
        .level(9)?;
    Ok(())
}

PPMd

Excellent for text, high memory usage:

rust
use zesven::{WriteOptions, codec::CodecMethod, Result};

fn example() -> Result<()> {
    let options = WriteOptions::new()
        .method(CodecMethod::PPMd)
        .level(8)?;
    Ok(())
}

Optional Methods

Enable additional methods via feature flags:

toml
[dependencies]
zesven = { version = "1.0", features = ["zstd", "lz4", "brotli"] }
rust
use zesven::{WriteOptions, codec::CodecMethod, Result};

fn example() -> Result<()> {
    // Zstandard - fast with good ratio (level range differs from LZMA)
    let options = WriteOptions::new()
        .method(CodecMethod::Zstd)
        .level_clamped(9);

    // LZ4 - extremely fast
    let options = WriteOptions::new()
        .method(CodecMethod::Lz4);

    // Brotli - excellent ratio for web content
    let options = WriteOptions::new()
        .method(CodecMethod::Brotli)
        .level_clamped(9);

    Ok(())
}

Dictionary Size

The dictionary size is automatically determined based on compression level. Higher levels use larger dictionaries:

LevelApproximate DictionaryMemory UsageBest For
1-31-4 MB~12-48 MBSmall files
4-64-16 MB~48-192 MBMedium files
7-916-64 MB~192-768 MBLarge files

Multi-threading

Parallel compression is enabled by default with the parallel feature. The library automatically uses available CPU cores for LZMA2 compression.

Method Comparison

MethodSpeedRatioMemoryNotes
Store★★★★★N/ALowNo compression
LZ4★★★★★★★LowExtremely fast
Deflate★★★★★★★LowGood compatibility
Zstd★★★★★★★★MediumBest speed/ratio
BZip2★★★★★★MediumGood for text
LZMA★★★★★★★HighExcellent ratio
LZMA2★★★★★★★★HighMulti-threaded LZMA
Brotli★★★★★★★HighBest for web
PPMd★★★★★Very HighBest for text

See Also

Released under MIT OR Apache-2.0 License