Class: Omnizip::Algorithms::BZip2

Inherits:
Omnizip::Algorithm show all
Defined in:
lib/omnizip/algorithms/bzip2.rb,
lib/omnizip/algorithms/bzip2/bwt.rb,
lib/omnizip/algorithms/bzip2/bz2.rb,
lib/omnizip/algorithms/bzip2/rle.rb

Overview

BZip2 block-sorting compression algorithm

BZip2 combines several compression techniques in a pipeline:

  1. Burrows-Wheeler Transform (BWT) - block-sorting transformation
  2. Move-to-Front Transform (MTF) - exploits locality
  3. Run-Length Encoding (RLE) - compresses repeated bytes
  4. Huffman Coding - variable-length entropy encoding

This algorithm is particularly effective for:

  • Text files with repetitive patterns
  • Data with high local similarity
  • Files where block-sorting improves compressibility

Block size affects both compression ratio and memory usage. Larger blocks (up to 900KB) generally provide better compression but require more memory.

Defined Under Namespace

Modules: Bz2 Classes: Bwt, Rle

Instance Attribute Summary

Attributes inherited from Omnizip::Algorithm

#filter, #options

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Omnizip::Algorithm

compress, decompress, inherited, #initialize, #with_filter

Constructor Details

This class inherits a constructor from Omnizip::Algorithm

Class Method Details

.metadataAlgorithmMetadata

Get algorithm metadata

Returns:

  • (AlgorithmMetadata)

    Algorithm information



53
54
55
56
57
58
59
60
# File 'lib/omnizip/algorithms/bzip2.rb', line 53

def self.
  Models::AlgorithmMetadata.new.tap do |meta|
    meta.name = "bzip2"
    meta.description = "BZip2 block-sorting compression using " \
                       "BWT, MTF, RLE, and Huffman coding"
    meta.version = "1.0.0"
  end
end

Instance Method Details

#compress(input_stream, output_stream, options = nil) ⇒ void

This method returns an undefined value.

Compress data using BZip2 algorithm

Parameters:

  • input_stream (IO)

    Input stream to compress

  • output_stream (IO)

    Output stream for compressed data

  • options (Models::CompressionOptions) (defaults to: nil)

    Compression options



68
69
70
71
# File 'lib/omnizip/algorithms/bzip2.rb', line 68

def compress(input_stream, output_stream, options = nil)
  level = level_from(options)
  output_stream.write(Bz2.compress(input_stream.read, level))
end

#decompress(input_stream, output_stream, _options = nil) ⇒ void

This method returns an undefined value.

Decompress BZip2-compressed data

Parameters:

  • input_stream (IO)

    Input stream of compressed data

  • output_stream (IO)

    Output stream for decompressed data

  • options (Models::CompressionOptions)

    Decompression options



79
80
81
82
# File 'lib/omnizip/algorithms/bzip2.rb', line 79

def decompress(input_stream, output_stream, _options = nil)
  output_stream.set_encoding(Encoding::BINARY)
  output_stream.write(Bz2.decompress(input_stream.read))
end