Deflate

Compress then decompress

flate2 cat-compression

flate2 provides DEFLATE compression and decompression, exposed as Read/BufRead/Write streams. flate2 uses a pure-Rust implementation by default. Use feature flags to opt in to system zlib.

Supported formats:

  • deflate
  • zlib
  • gzip

Compress, then decompress data:

use std::io::prelude::*;

use flate2::Compression;
use flate2::read::GzDecoder;
use flate2::write::ZlibEncoder;

fn compress() -> anyhow::Result<()> {
    let mut e = ZlibEncoder::new(Vec::new(), Compression::default());
    e.write_all(b"foo")?;
    e.write_all(b"bar")?;
    let _compressed_bytes = e.finish();
    Ok(())
}

fn decompress() -> anyhow::Result<()> {
    let mut d = GzDecoder::new("...".as_bytes());
    let mut s = String::new();
    d.read_to_string(&mut s)?;
    println!("{}", s);
    Ok(())
}

fn main() -> anyhow::Result<()> {
    compress()?;
    decompress()?;
    Ok(())
}