#compression-decompression #huffman-coding #decompression

bin+lib huff

Example compression/decompression CLI software based on the huff_coding crate

3 stable releases

1.0.6 Mar 3, 2021
1.0.5 Feb 28, 2021
1.0.4 Feb 27, 2021
1.0.3 Jan 21, 2021
1.0.2 Jan 20, 2021

#518 in Compression

GPL-2.0-or-later

110KB
1.5K SLoC

huff

Crate

License

Example compression/decompression CLI software based on the huff_coding crate.

Usage

huff [FLAGS] [OPTIONS] <SRC_FILE> [DST_FILE]

Args

<SRC_FILE>    
<DST_FILE>    [default: ./SRC_FILE.hff]

Options

-b, --block-size <SIZE>
        Set how many bytes can be loaded from the file at one time
        Possible units: 
            K/Ki -> Kilobytes/Kibibytes
            M/Mi -> Megabytes/Mebibytes
            G/Gi -> Gigabytes/Gibibytes
         [default: 2G]

Flags

-d, --decompress    
        Decompresses the hff SRC_FILE into DST_FILE.hff
            
-n, --noask         
        Omits asking if should replace existing DST_FILE

-r, --replace       
        Deletes SRC_FILE upon completion

-t, --time          
        Prints how long it took to finish
-h, --help          
        Prints help information

-V, --version       
        Prints version information

File format

The hff file format is encoded as follows:

  1. A byte containing the number of bits used for padding:
    • first 4 bits store the HuffTree's padding bits
    • the remaining bits store the compressed data's padding bits
  2. 4 byte number representing the length (in bytes) of the stored HuffTree
  3. A HuffTree, used to compress the file, represented in binary (see HuffTree::try_from_bin)
  4. The actual compressed data

Dependencies

~3MB
~52K SLoC