zlib - zlib

zlib
zlib-logo
Eerste uitgave 1 mei 1995 ( 1995-05-01 )
Stabiele vrijlating
1.2.11 / 15 januari 2017 ; 4 jaar geleden ( 2017-01-15 )
Opslagplaats Bewerk dit op Wikidata
Geschreven in C
Besturingssysteem Cross-platform
Type Data compressie
Licentie zlib-licentie
Website zlib .net

zlib is een softwarebibliotheek die wordt gebruikt voor gegevenscompressie . zlib is geschreven door Jean-loup Gailly en Mark Adler en is een abstractie van het DEFLATE- compressiealgoritme dat wordt gebruikt in hun gzip- bestandscompressieprogramma. zlib is ook een cruciaal onderdeel van veel softwareplatforms, waaronder Linux , macOS en iOS . Het is ook gebruikt in gameconsoles zoals de PlayStation 4 , PlayStation 3 , Wii U , Wii , Xbox One en Xbox 360 .

De eerste openbare versie van zlib, 0.9, werd uitgebracht op 1 mei 1995 en was oorspronkelijk bedoeld voor gebruik met de libpng- afbeeldingsbibliotheek. Het is gratis software , gedistribueerd onder de zlib-licentie .

Mogelijkheden

inkapseling

zlib-gecomprimeerde gegevens worden meestal geschreven met een gzip- of een zlib-wrapper. De wrapper kapselt de onbewerkte DEFLATE- gegevens in door een header en trailer toe te voegen. Dit zorgt voor stroomidentificatie en foutdetectie die niet worden geleverd door de onbewerkte DEFLATE-gegevens.

De gzip-header, die wordt gebruikt in het alomtegenwoordige gzip- bestandsformaat, is groter dan de zlib-header, omdat het een bestandsnaam en andere bestandssysteeminformatie opslaat.

Algoritme

Vanaf september 2018 ondersteunt zlib slechts één algoritme, DEFLATE genaamd , dat een combinatie van een variatie van LZ77 (Lempel-Ziv 1977) en Huffman-codering gebruikt . Dit algoritme zorgt voor een goede compressie van een grote verscheidenheid aan gegevens met minimaal gebruik van systeembronnen. Dit is ook het algoritme dat wordt gebruikt in het Zip-archiefformaat . De header houdt rekening met andere algoritmen, maar geen daarvan is momenteel geïmplementeerd.

Gebruik van hulpbronnen

zlib biedt faciliteiten voor controle over processor- en geheugengebruik. Er kan een waarde voor het compressieniveau worden opgegeven die snelheid inruilt voor compressie. Er zijn ook voorzieningen om geheugen te besparen, wat handig is in omgevingen met beperkt geheugen, zoals sommige embedded systemen.

Strategie

De compressie kan worden geoptimaliseerd voor specifieke soorten gegevens. Als iemand de bibliotheek gebruikt om altijd specifieke soorten gegevens te comprimeren, kan het gebruik van een specifieke strategie de compressie en prestaties verbeteren. Als de gegevens bijvoorbeeld lange lengtes van herhaalde bytes bevatten, kan de strategie voor runlengtecodering (RLE) goede resultaten opleveren bij hogere snelheid. Voor algemene gegevens heeft de standaardstrategie de voorkeur.

Foutafhandeling

Fouten in gecomprimeerde gegevens kunnen worden gedetecteerd en overgeslagen. Verder, als "full-flush" punten naar de gecomprimeerde stream worden geschreven, dan kunnen corrupte gegevens worden overgeslagen, en de decompressie zal opnieuw worden gesynchroniseerd op het volgende spoelpunt - hoewel er geen foutherstel van de corrupte gegevens wordt geboden. Full-flush-punten zijn handig voor grote gegevensstromen op onbetrouwbare kanalen, waarbij enig gegevensverlies onbelangrijk is, zoals bij sommige multimediatoepassingen. Het creëren van veel spoelpunten kan echter zowel de snelheid als de hoeveelheid (verhouding) van de compressie beïnvloeden.

Gegevenslengte:

Er is geen limiet aan de lengte van gegevens die kunnen worden gecomprimeerd of gedecomprimeerd. Herhaalde oproepen naar de bibliotheek maken het mogelijk een onbeperkt aantal datablokken te verwerken. Sommige aanvullende code (tellers) kunnen last hebben van overflow voor lange gegevensstromen, maar dit heeft geen invloed op de daadwerkelijke compressie of decompressie.

Bij het comprimeren van een lange (of oneindige) datastroom is het aan te raden om regelmatig full-flush punten te schrijven.

Toepassingen

Tegenwoordig is zlib iets van een de facto standaard , tot het punt dat zlib en DEFLATE vaak door elkaar worden gebruikt in standaarddocumenten, waarbij duizenden applicaties erop vertrouwen voor compressie, direct of indirect. Waaronder:

  • De Linux-kernel , waarbij zlib wordt gebruikt om gecomprimeerde netwerkprotocollen en gecomprimeerde bestandssystemen te implementeren en om de kernel-image tijdens het opstarten te decomprimeren.
  • GNU Binutils en GNU Debugger (GDB)
  • libpng , de referentie-implementatie voor het PNG- beeldformaat, dat DEFLATE specificeert als de stroomcompressie voor zijn bitmapgegevens .
  • libwww , een API voor webtoepassingen zoals webbrowsers .
  • De Apache HTTP-server , die zlib gebruikt om HTTP/1.1 te implementeren .
  • Evenzo gebruikt de cURL- bibliotheek zlib om HTTP-antwoorden te decomprimeren.
  • De OpenSSH- client en -server, die afhankelijk zijn van zlib om de optionele compressie uit te voeren die wordt aangeboden door het Secure Shell- protocol.
  • De OpenSSL- en GnuTLS- beveiligingsbibliotheken, die optioneel zlib kunnen gebruiken om TLS- verbindingen te comprimeren .
  • De FFmpeg multimedia bibliotheek, die gebruik zlib lezen en schrijven de DEFLATE gecomprimeerde delen van stroom formats , zoals Matroska .
  • De externe bestandssynchronisatieprogramma rsync , die zlib gebruikt om optionele protocolcompressie te implementeren.
  • De pakketbeheerders van dpkg en RPM , die zlib gebruiken om bestanden uit gecomprimeerde softwarepakketten uit te pakken.
  • De Apache Subversion en CVS versiebeheersystemen , die zlib gebruiken om verkeer van en naar externe repositories te comprimeren.
  • Het Apache ORC -kolomgeoriënteerde gegevensopslagformaat gebruikt ZLib als standaardcompressiemethode.
  • Het Git- versiebeheersysteem gebruikt zlib om de inhoud van zijn gegevensobjecten (blobs, bomen, commits en tags) op te slaan.
  • Het PostgreSQL RDBMS gebruikt zlib met een aangepast dumpformaat (pg_dump -Fc) voor databaseback-ups.
  • De klasse System.IO.Compression.DeflateStream van Microsoft .NET Framework 2.0 en hoger.
  • Het "deflate"-hulpprogramma in TORNADO als onderdeel van het VxWorks- besturingssysteem, gemaakt door Wind River Systems, gebruikt zlib om opstart-ROM-images te comprimeren.
  • zlib-flate(1), onbewerkt zlib-compressieprogramma, onderdeel van qpdf
  • De MySQL RDBMS gebruikt ZLib LZ77 voor compressie in InnoDB- tabellen

zlib wordt ook gebruikt in veel embedded apparaten, zoals de Apple iPhone en Sony PlayStation 3 , omdat de code draagbaar is, een ruime licentie heeft en een relatief klein geheugengebruik heeft.

vorken

Een veelgebruikte bibliotheek gebouwd op een oude codebasis, zlib wordt ook vaak geforkt door derden die verbeteringen aan deze bibliotheek claimen:

  • Intel heeft een krachtige vork van zlib.
  • CloudFlare handhaaft een krachtige vork met "enorme" verbeteringen.
  • Zlib-ng is een zlib-vervangingsvork met optimalisaties voor "next generation"-systemen.

Zie ook

Referenties

Externe links