Skip to main content
7-Zip filters are preprocessing algorithms that transform data before compression to achieve better compression ratios for specific file types.

What are Filters?

Filters preprocess data to make it more compressible:
  1. Filter - Transform data (e.g., convert relative jumps in executables)
  2. Compress - Apply LZMA or other compression
  3. Result - Better compression ratio
Filters are lossless and reversible transformations.

Available Filters

BCJ Filters (Branch-Call-Jump)

Designed for executable files:

Delta Filter

Method ID: 03 For data with small numeric differences:
  • BMP images
  • WAV audio
  • Numeric data arrays
  • Database dumps

BCJ Filter (x86)

How BCJ Works

Converts relative jumps and calls in x86 code to absolute addresses: Original x86 code:
After BCJ filter:
This makes similar code sections more compressible.

Using BCJ Filter

7-Zip automatically applies BCJ filter to .exe and .dll files when compressing to 7z format.

Compression Improvement

Typical compression improvement with BCJ:

BCJ2 Filter

Advanced x86 Filter

BCJ2 is a more sophisticated filter that separates executable code into multiple streams:
Four output streams:
  1. Main data stream
  2. CALL/JMP targets
  3. JUMP targets
  4. Control bytes

BCJ vs BCJ2

BCJ2 provides 2-5% better compression than BCJ but is slower to compress and decompress.

ARM Filters

ARM (Little-Endian)

ARM64 / AArch64

ARMT (ARM Thumb)

Delta Filter

For data with small differences between consecutive bytes:
Delta parameter specifies the distance between bytes to compute differences:
  • 1 - Adjacent bytes (8-bit images)
  • 2 - 16-bit values (stereo audio)
  • 4 - 32-bit values (RGB images, int arrays)

Delta Example

Original data:
After Delta filter (distance=1):
The transformed data compresses much better.

Filter Chains

Combine multiple filters:

Automatic Filter Selection

7-Zip automatically selects filters based on file extension:

Filter Implementation

Filter source code locations:
  • BCJ: C/Bra86.c (lines 1-124)
  • BCJ2: C/Bcj2.c (lines 1-274)
  • ARM: C/Bra.c (ARM filter section)
  • ARM64: C/Bra.c (ARM64 filter section)
  • Delta: C/Delta.c (lines 1-93)

BCJ Assembly Optimization

Optimized versions with x86-64 assembly:
  • Asm/x86/7zCrcOpt.asm - CRC with BCJ preprocessing
  • Uses SIMD instructions for faster filtering

Performance Impact

Filters have minimal speed impact but significant compression improvements for appropriate file types.

Advanced Examples

Maximum Compression for Executables

Solid Archive with Filters

Cross-Platform Executables

When to Use Filters

Use filters for:
  • Executable files (.exe, .dll, .so)
  • ARM/ARM64 binaries
  • BMP images
  • WAV audio files
  • Raw numeric data
Don’t use filters for:
  • Already compressed files (JPEG, PNG, MP3)
  • Encrypted data
  • Random data
  • Text files (no benefit)

Disabling Automatic Filters

See Also