lz4 ==== [![Build Status](https://github.com/10XGenomics/lz4-rs/workflows/Test/badge.svg?branch=master)](https://github.com/10XGenomics/lz4-rs/actions?query=branch%3Amaster) [![Crates.io](https://img.shields.io/crates/v/lz4.svg)](https://crates.io/crates/lz4) [![Join the chat at https://gitter.im/bozaro/lz4-rs](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/bozaro/lz4-rs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Rustdoc](https://img.shields.io/badge/doc-rustdoc-green.svg)](https://docs.rs/lz4/) NOTE: 10xGenomics is the new official home of lz4-rs, replacing [https://github.com/bozaro/lz4-rs](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`: ```toml [dependencies] lz4 = "1.23.1" ``` Sample code for compression/decompression: ```rust 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(()) } ```