13 stable releases

Uses old Rust 2015

1.11.1+lz4-1.10.0 Sep 26, 2024
1.10.0 Jul 22, 2024
1.9.4 Aug 26, 2022
1.9.3 Mar 6, 2022
1.0.1+1.7.3 Nov 26, 2016

#65 in Compression

Download history 296694/week @ 2024-07-23 304762/week @ 2024-07-30 290902/week @ 2024-08-06 322173/week @ 2024-08-13 315087/week @ 2024-08-20 300820/week @ 2024-08-27 333273/week @ 2024-09-03 316532/week @ 2024-09-10 283369/week @ 2024-09-17 332829/week @ 2024-09-24 321087/week @ 2024-10-01 350563/week @ 2024-10-08 361343/week @ 2024-10-15 380474/week @ 2024-10-22 354415/week @ 2024-10-29 377822/week @ 2024-11-05

1,529,111 downloads per month
Used in 938 crates (20 directly)

MIT license

1MB
21K SLoC

C 18K SLoC // 0.2% comments Visual Studio Project 1.5K SLoC Python 810 SLoC // 0.1% comments Shell 486 SLoC // 0.1% comments Rust 355 SLoC // 0.4% comments Batch 197 SLoC // 0.1% comments C++ 173 SLoC // 0.2% comments Visual Studio Solution 131 SLoC Bitbake 70 SLoC // 0.3% comments

lz4

Build Status Crates.io Join the chat at https://gitter.im/bozaro/lz4-rs Rustdoc

NOTE: 10xGenomics is the new official home of lz4-rs, replacing https://github.com/bozaro/lz4-rs

This repository contains binding for lz4 compression library (https://github.com/Cyan4973/lz4).

LZ4 is a very fast lossless compression algorithm, providing compression speed at 400 MB/s per core, with near-linear scalability for multi-threaded applications. It also features an extremely fast decoder, with speed in multiple GB/s per core, typically reaching RAM speed limits on multi-core systems.

Usage

Put this in your Cargo.toml:

[dependencies]
lz4 = "1.23.1"

Sample code for compression/decompression:

extern crate lz4;

use std::env;
use std::fs::File;
use std::io::{self, Result};
use std::path::{Path, PathBuf};

use lz4::{Decoder, EncoderBuilder};

fn main() {
    println!("LZ4 version: {}", lz4::version());

    for path in env::args().skip(1).map(PathBuf::from) {
        if let Some("lz4") = path.extension().and_then(|e| e.to_str()) {
            decompress(&path, &path.with_extension("")).unwrap();
        } else {
            compress(&path, &path.with_extension("lz4")).unwrap();
        }
    }
}

fn compress(source: &Path, destination: &Path) -> Result<()> {
    println!("Compressing: {} -> {}", source.display(), destination.display());

    let mut input_file = File::open(source)?;
    let output_file = File::create(destination)?;
    let mut encoder = EncoderBuilder::new()
        .level(4)
        .build(output_file)?;
    io::copy(&mut input_file, &mut encoder)?;
    let (_output, result) = encoder.finish();
    result
}

fn decompress(source: &Path, destination: &Path) -> Result<()> {
    println!("Decompressing: {} -> {}", source.display(), destination.display());

    let input_file = File::open(source)?;
    let mut decoder = Decoder::new(input_file)?;
    let mut output_file = File::create(destination)?;
    io::copy(&mut decoder, &mut output_file)?;

    Ok(())
}

Dependencies