Compression Algorithms
Purpose
This section explains the 5 compression algorithms supported by Cabriolet, helping you choose the right algorithm for your needs and understand how each works.
Concepts
Compression algorithms trade off between compression ratio, speed, and memory usage. Cabriolet supports multiple algorithms to match different use cases, from fast extraction to maximum compression.
Supported Algorithms
None - Uncompressed storage
-
Compression: 0% (stores uncompressed)
-
Speed: Fastest extraction
-
Memory: Minimal
-
Use Cases: Pre-compressed files, fast access, testing
LZSS - Dictionary compression
-
Compression: Moderate (40-60%)
-
Speed: Fast compression and extraction
-
Memory: Low (small window)
-
Use Cases: Legacy compatibility, simple compression
MSZIP - DEFLATE-based compression
-
Compression: Good (50-70%)
-
Speed: Balanced
-
Memory: Moderate
-
Use Cases: General purpose, ZIP compatibility, default choice
LZX - High compression
-
Compression: Excellent (60-80%)
-
Speed: Slower compression, fast extraction
-
Memory: High (large window)
-
Use Cases: Software distribution, maximum compression, archival
Algorithm comparison
| Algorithm | Ratio | Speed | Memory | Best For |
|---|---|---|---|---|
None | 0% | ★★★★★ | ★★★★★ | Pre-compressed data |
LZSS | ★★☆☆☆ | ★★★★☆ | ★★★★☆ | Legacy files, simple compression |
MSZIP | ★★★☆☆ | ★★★☆☆ | ★★★☆☆ | General purpose, default |
LZX | ★★★★★ | ★★☆☆☆ | ★★☆☆☆ | Software distribution |
Quantum | ★★★★☆ | ★★★☆☆ | ★★★★☆ | Variable requirements |
Quick selection guide
Choose None when:
-
Files are already compressed (images, videos, zip files)
-
Fast extraction is critical
-
Testing or debugging
Choose LZSS when:
-
Working with SZDD or KWAJ formats
-
Simplicity is important
-
Legacy compatibility required
Choose MSZIP when:
-
General-purpose compression needed
-
Balanced performance desired
-
Default recommendation
Choose LZX when:
-
Maximum compression ratio needed
-
Distribution package size matters
-
Extraction speed more important than compression speed
Choose Quantum when:
-
Memory constraints exist
-
Configurable compression needed
-
Moderate compression acceptable
Usage examples
Specifying compression algorithm
# Create with MSZIP (default)
cabriolet create archive.cab files/
# Create with LZX for maximum compression
cabriolet create --compression=lzx small.cab files/
# Create uncompressed for speed
cabriolet create --compression=none fast.cab files/Using the Ruby API
require 'cabriolet'
# Create with specific compression
compressor = Cabriolet::CAB::Compressor.new(compression: :lzx)
compressor.add_file('large-file.dat')
compressor.write('compressed.cab')
# Detect compression of existing archive
decompressor = Cabriolet::CAB::Decompressor.new('archive.cab')
puts "Compression: #{decompressor.cabinet.folders.first.compression}"Performance considerations
Format Compatibility
Not all formats support all compression algorithms:
| Format | Supported Algorithms |
|---|---|
CAB | None, MSZIP, LZX, Quantum |
CHM | LZX only |
SZDD | LZSS only |
KWAJ | LZSS, MSZIP |
HLP | LZ77 variant (automatic) |
LIT | DES + compression (automatic) |
OAB | LZX only |
Next steps
-
Read Choosing the Right Algorithm for detailed selection criteria
-
Study individual algorithm guides for technical details
-
Explore Compression Algorithm Concepts