10 releases (5 breaking)

0.9.0 Dec 8, 2023
0.8.3 Oct 20, 2023
0.8.1 Aug 7, 2023
0.8.0 Jun 11, 2023
0.5.0 Mar 25, 2023

#334 in Compression

26 downloads per month
Used in 2 crates

LGPL-3.0-only

125KB
2.5K SLoC

C 1.5K SLoC // 0.1% comments Rust 700 SLoC // 0.0% comments M4 311 SLoC // 0.5% comments Automake 56 SLoC // 0.0% comments Shell 17 SLoC // 0.1% comments

bzip3-rs

This is a Rust wrapper for bzip3.

Documentation

Crate Features

  • bundled: use bundled libbzip3

Current bundled bzip3 library version is kspalaiologos/bzip3@1.3.2.


lib.rs:

BZip3-rs

BZip3 compression for Rust.

BZip3 file structure:

[ magic number ([u8; 5]) | block size (i32) | block1 | block2 | blockN... ]

Structure of each block: [ new size (i32) | read size (i32) | data ]

Due to the naming from the original bzip3 library, new size indicates the data size after compression, and read size indicates the original data size.

Examples

use std::io::Read;
use bzip3::read::{Bz3Decoder, Bz3Encoder};

let data = "hello, world".as_bytes();
let block_size = 100 * 1024; // 100 kiB

let mut compressor = Bz3Encoder::new(data, block_size).unwrap();
let mut decompressor = Bz3Decoder::new(&mut compressor).unwrap();

let mut contents = String::new();
decompressor.read_to_string(&mut contents).unwrap();
assert_eq!(contents, "hello, world");

Dependencies

~1.4–3.5MB
~80K SLoC