ThiersLabs
<- Alle projecten

SAT-ZIP

Snelle archiver met een eigen codec

SAT-ZIP begon met een vraag: hoe snel kan een archiver zijn als de codec vanaf de basis op snelheid is gebouwd? Het antwoord werd een complete Windows-app rond een eigen codec.

DownloadenNieuwste release ophalen
Broncode
  • C++
  • AVX2
  • Dear ImGui
  • CMake
  • Inno Setup

In het kort

2,2 GB/s
uitpaksnelheid op tekst, native build
1,4x
sneller dan LZ4 bij het uitpakken van tekst
5
archiefformaten die het leest en schrijft
3
compressiemodi, van snel tot maximale ratio

Het verhaal

  1. 01

    Waarom nog een archiver

    Zippen in Windows is traag en makkelijk te vergeten. Ik wilde een archiver met de snelheid van LZ4 die je ook echt elke dag gebruikt: rechtsklikken op een map, formaat kiezen, klaar. En omdat snelheidsclaims goedkoop zijn, zit er een benchmarklab in, zodat iedereen het op eigen bestanden kan meten.

  2. 02

    De codec

    Data wordt opgeknipt in losse blokken van 64 KiB. Een hashtabel vindt herhaalde reeksen, en de decoder kopieert matches met brede SIMD-loads. In mijn benchmarks verslaat de decoder LZ4 op tekst (2229 tegen 1552 MB/s) en op gemengde data (2622 tegen 2385 MB/s). Elk getal wordt eerst gecontroleerd met een decode van dezelfde data.

  3. 03

    Drie modi

    Mode S gebruikt een hashtabel met een enkele probe en is het snelst. Mode R voegt hash chains en lazy matching toe voor een betere ratio, met dezelfde uitpaksnelheid. Mode T zet daar een split-stream rANS-entropiecoder bovenop voor de beste ratio. Alle drie delen een blokformaat.

  4. 04

    Meer dan een codec

    Rond de codec zit een complete app: multithreaded .zip, plus .7z, .tar en .tar.xz, een rechtermuismenu in Verkenner, een commandline-tool en een C-SDK. Archieven kunnen optioneel versleuteld worden met SAT-OBELISK.

Live demo

Comprimeer het in je browser

Dit is de echte SAT-ZIP-codec, gecompileerd naar WebAssembly (10,6 KB). Typ tekst of sleep een bestand hierheen. Alles draait op je eigen apparaat; er wordt niets geupload.

Invoer
Sleep een bestand ergens in dit vak

Meer projecten