11 releases (6 breaking)

new 0.11.0 Dec 18, 2024
0.9.0 Dec 8, 2023
0.8.3 Oct 20, 2023
0.8.0 Jun 11, 2023
0.5.0 Mar 25, 2023

#135 in Compression

Download history 3/week @ 2024-08-30 12/week @ 2024-09-20 13/week @ 2024-09-27 1/week @ 2024-10-04 9/week @ 2024-10-11 1/week @ 2024-10-18 11/week @ 2024-11-01 9/week @ 2024-11-08 723/week @ 2024-11-15 67/week @ 2024-11-22 372/week @ 2024-11-29 57/week @ 2024-12-06 385/week @ 2024-12-13

953 downloads per month
Used in 2 crates

LGPL-3.0-only

130KB
2.5K SLoC

C 1.5K SLoC // 0.1% comments Rust 743 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.5.1.

TODO

Stream encoder/decoder multithreading support.


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–4MB
~82K SLoC