DEFLATIONIEREN

Deflationieren Sie ist ein lossless Datenkompressionsalgorithmus, der eine Kombination des LZ77 Algorithmus und Huffmans verwendet, der codiert. Es wurde von Phil Katz für die Version 2 seines PKZIP das Archivieren des Werkzeugs ursprünglich definiert und wurde später RFC 1951 angegeben.

Der ursprüngliche Algorithmus, wie entworfen, durch Katz wurde als patentiert und PKWARE zugeteilt. Deflationieren Sie wird weit gedacht, frei von irgendwelchen existierenden Patenten zu sein, und war so auf einmal, bevor das Patent auf LZW (der im GIF Dateiformat verwendet wird) abgelaufen ist. Das hat zu seinem Gebrauch in zusammengepressten Dateien von gzip und PNG Bilddateien zusätzlich zum SCHWIRREN-Dateiformat geführt, für das Katz es ursprünglich entworfen hat.

Strom-Format

Ein Deflationieren Strom besteht aus einer Reihe von Blöcken. Jedem Block wird durch einen 3-Bit-Kopfball vorangegangen:

  • 1 Bit: Letzter Block im Strom-Anschreiber:
  • : das ist der letzte Block im Strom.
  • : es gibt mehr Blöcke, um nach diesem in einer Prozession zu gehen.
  • 2 Bit: Verschlüsselung der Methode hat für diesen Block-Typ verwendet:
  • : eine versorgen/rohe/wörtliche Abteilung, zwischen 0 und 65,535 Bytes in der Länge.
  • : ein statischer Huffman hat Block mit einem vorabgestimmten Baum von Huffman zusammengepresst.
  • : ein komprimierter Block vollendet mit dem gelieferten Tisch von Huffman.
  • : vorbestellt, nicht verwenden.

Die meisten Blöcke werden damit enden, mit der Methode, der dynamische Huffman verschlüsselt zu werden, der verschlüsselt, der einen optimierten Baum von Huffman erzeugt, der für jeden Datenblock individuell kundengerecht angefertigt ist. Instruktionen, den notwendigen Baum von Huffman zu erzeugen, folgen sofort dem Block-Kopfball.

Kompression wird durch zwei Schritte erreicht

  • Das Zusammenbringen und der Ersatz von Doppelschnuren mit Zeigestöcken.
  • Das Ersetzen von Symbolen mit neuen, belasteten auf der Frequenz des Gebrauches gestützten Symbolen.

Doppelschnur-Beseitigung

Innerhalb von komprimierten Blöcken, wenn eine Doppelreihe von Bytes (eine wiederholte Schnur) entdeckt wird, dann wird ein Rückverweis eingefügt, sich zur vorherigen Position dieser identischen Schnur stattdessen verbindend. Ein verschlüsseltes Match zu einer früheren Schnur besteht aus einer Länge (3-258 Bytes) und einer Entfernung (1-32.768 Bytes). Verhältnisrückverweise können über jede Zahl von Blöcken gemacht werden, so lange die Entfernung innerhalb der letzten 32 Kilobytes von unkomprimierten Daten decodiert erscheint (hat das gleitende Fenster genannt).

Die Bit-Verminderung

Die zweite Kompressionsbühne besteht aus dem Ersetzen allgemein verwendeter Symbole mit kürzeren Darstellungen und weniger allgemein verwendeter Symbole mit längeren Darstellungen. Die verwendete Methode ist Huffman, der codiert, der einen unprefixed Baum von nichtüberlappenden Zwischenräumen schafft, wo die Länge jeder Folge zur Wahrscheinlichkeit dieses Symbols umgekehrt proportional ist, das verschlüsselt werden muss. Je wahrscheinlicher ein Symbol verschlüsselt werden muss, desto kürzer seine Bit-Folge sein wird.

Ein Baum wird geschaffen, der Raum für 288 Symbole enthält:

  • 0-255: vertreten Sie die wörtlichen Bytes/Symbole 0-255.
  • 256: das Ende des Blocks - hört auf in einer Prozession zu gehen, wenn letzter Block, sonst anfangen Sie, folgenden Block zu bearbeiten.
  • 257-285: verbunden mit Extrabit, einer Match-Länge von 3-258 Bytes.
  • 286, 287: nicht verwendet, vorbestellt und ungesetzlich, aber noch ein Teil des Baums.

Einem Match-Länge-Code wird immer von einem Entfernungscode gefolgt. Gestützt auf dem Entfernungscode gelesen weiter können "Extra"-Bit gelesen werden, um die Endentfernung zu erzeugen. Der Entfernungsbaum enthält Raum für 32 Symbole:

  • 0-3: Entfernungen 1-4
  • 4-5: Entfernungen 5-8, 1 Extrabit
  • 6-7: Entfernungen 9-16, 2 Extrabit
  • 8-9: Entfernungen 17-32, 3 Extrabit
  • ...
  • 26-27: Entfernungen 8.193-16.384, 12 Extrabit
  • 28-29: Entfernungen 16.385-32.768, 13 Extrabit
  • 30-31: nicht verwendet, vorbestellt und ungesetzlich, aber noch ein Teil des Baums.

Bemerken Sie, dass für die Match-Entfernungssymbole 2-29 die Zahl von Extrabit als berechnet werden kann.

Encoder/compressor

Während der Kompressionsbühne ist es der encoder, der wählt, hat die Zeitdauer das Suchen nach dem Zusammenbringen von Schnuren ausgegeben. Die zlib/gzip Bezugsdurchführung erlaubt dem Benutzer, von einer gleitenden Skala des wahrscheinlichen resultierenden Kompressionsniveaus gegen die Geschwindigkeit der Verschlüsselung auszuwählen. Optionsreihe davon (versuchen Kompression nicht, versorgen gerade unkomprimiert), zum Darstellen der maximalen Fähigkeit zur Bezugsdurchführung in zlib/gzip.

Anderer, encoders Deflationieren, sind erzeugt worden, von denen alle auch einen vereinbaren bitstream fähigen davon erzeugen werden, durch irgendwelchen vorhanden dekomprimiert zu werden, Deflationieren Decoder. Sich unterscheidende Durchführungen werden wahrscheinlich Schwankungen auf dem endgültigen verschlüsselten erzeugten Bit-Strom erzeugen. Der Fokus mit non-zlib Versionen eines encoder hat normalerweise einen effizienter komprimierten und kleineren verschlüsselten Strom erzeugen sollen.

Deflate64/Enhanced Deflationieren

Deflate64, der durch PKWare angegeben ist, ist eine Eigentumsvariante des Deflationieren Verfahrens. Die grundsätzlichen Mechanismen bleiben dasselbe. Was sich geändert hat, ist die Zunahme in der Wörterbuch-Größe von 32 Kilobytes bis 64 Kilobytes, einer Hinzufügung von 14 Bit zu den Entfernungscodes, so dass sie eine Reihe von 64 Kilobytes richten können, und der Länge-Code ist durch 16 Bit erweitert worden, so dass es Längen von 3 bis 65538 Bytes definieren kann. Das führt zu Deflate64, der ein ein bisschen höheres Kompressionsverhältnis und eine ein bisschen niedrigere Kompressionszeit hat, als Deflationieren. Mehrere freie und/oder offene Quellprojekte unterstützen Deflate64, solch so 7-Schwirren-, während andere, wie zlib, nicht tun, infolge der Eigentumsnatur des Verfahrens und der sehr bescheidenen Leistungszunahme Deflationieren.

Das Verwenden Deflationiert in der neuen Software

Durchführungen dessen Deflationieren sind auf vielen Sprachen frei verfügbar. C Programme verwenden normalerweise die zlib Bibliothek (laut der alten BSD-Lizenz ohne Werbeklausel). Programme das schriftliche Verwenden der Dialekte von Borland des Pascal kann paszlib, ein C ++ Bibliothek verwenden, werden als ein Teil 7-Zip/AdvanceCOMP eingeschlossen. Java schließt Unterstützung als ein Teil der Standardbibliothek (in java.util.zip) ein. Microsoft.NET Fachwerk 2.0 Grundklassenbibliothek unterstützt es im System. IO.Compression namespace.

Durchführungen von Encoder

  • PKZIP: Die erste Durchführung, die ursprünglich von Phil Katz als ein Teil von PKZip getan ist.
  • zlib/gzip: Durchführung des normativen Verweises, die in einem riesigen Betrag der Software, infolge der öffentlichen Verfügbarkeit des Quellcodes und einer Lizenz verwendet ist, die Einschließung in andere Software erlaubt.
  • jzlib: Rewrite/re-implementation/port des encoder ins reine Java und verteilt laut einer BSD-Lizenz. (Völlig gestalteter Ersatz für).
  • PasZLIB: Die Übersetzung/Hafen des Codes in die Quelle von Pascal codiert durch Jacques Nomssi-Nzali.
  • gziplite: Minimalist arbeitet / mit der minimalen Speichervoraussetzung nach, auch Datenkompression/Dekompression während der Übertragung (kein Bedürfnis zu bufferize der ganze Eingang) und Eingang/Produktion dazu unterstützend.
  • KZIP/PNGOUT: Ein encoder durch den Spielprogrammierer Ken Silverman, der verwendet und.
  • PuZip: entworfen für den Kommodore 64/C128 Computer. PuZip wird auf eine 8-Kilobyte-Fenster-Größe LZ77, mit nur dem Laden (Typ) beschränkt und hat Huffman (Typ) Methoden bestochen.
  • BigSpeed Deflationieren: Verfügbar als eine FRAU Windows blockiert auf 32 Kilobytes beschränkter DLL auf einmal und drei Kompressionseinstellungen.
  • BJWFlate & DeflOpt/DeflOpt: Die Dienstprogramme von Ben Jos Walbeehm. Bemerken Sie, dass der Autor Entwicklung auf BJWFlate (aber nicht DeflOpt) im März 2004 aufgehört hat.
  • Geheim-++: Enthält eine öffentliche Bereichsdurchführung in C ++ gerichtet hauptsächlich auf das Reduzieren potenzieller Sicherheitsverwundbarkeit. Der Autor, Wei Dai setzt "" fest.
  • DeflateStream - eine Durchführung eines Stroms, der leistet, DEFLATIONIERT Kompression, es wird mit der mit dem.NET Fachwerk eingeschlossenen Grundklassenbibliothek paketiert.
  • ParallelDeflateOutputStream - ein offener Quellstrom, der eine Parallele (Mehrfaden) Entlüften-Strom für den Gebrauch in.NET Programmen durchführt.
  • 7-Zip/AdvanceCOMP: Geschrieben von Igor Pavlov in C ++ wird diese Version frei lizenziert und neigt dazu, höhere Kompression zu erreichen, als zlib auf Kosten des Zentraleinheitsgebrauchs. Hat eine Auswahl, das DEFLATE64 Lagerungsformat zu verwenden.
  • PuTTY `sshzlib.c`: Eine eigenständige Durchführung, die zu vollen fähig ist, decodieren, aber statischer Baum nur Entwicklung durch Simon Tatham. MIT lizenziert.
  • Heilbutt `deflate.c`: Eine eigenständige zu vollen fähige Durchführung decodiert. Gegabelt von PuTTY `sshzlib.c`, aber erweitert, um dynamische Bäume von Huffman zu schreiben, und stellt Adler-32 und CRC-32 Kontrollsumme-Unterstützung zur Verfügung.
  • Der Plan 9 von Glockenlaboratorien die Libflate-Werkzeuge des Betriebssystems deflationiert Kompression.
  • Hyperbac: Verwendet seine eigene lossless Eigentumskompressionsbibliothek (geschrieben in C ++ und Zusammenbau) mit einer Auswahl, das DEFLATE64 Lagerungsformat durchzuführen.
  • zip.js: Durchführung von JavaScript.

AdvanceCOMP verwendet die höhere Kompressionsverhältnis-Version dessen, Deflationieren wie durchgeführt, durch den 7-Schwirren-, um Wiederkompression von gzip, PNG, MNG und SCHWIRREN-Dateien mit der Möglichkeit zu ermöglichen, kleinere Dateigrößen zu erreichen, als zlib bei maximalen Einstellungen im Stande ist. Ein noch wirksamerer (sondern auch mehr Benutzereingangsverlangen und Zentraleinheit intensiv) Deflationiert encoder wird innerhalb des KZIP von Ken Silverman und PNGOUT Dienstprogramme verwendet.

Hardware encoders

  • AHA361-PCIX/AHA362-PCIX von Comtech AHA. Comtech hat eine PCI-X Karte erzeugt (PCI-Personalausweis:) fähig dazu, das Strom-Verwenden zusammenzupressen, Deflationieren an einer Rate von bis zu 3.0 Gbit/s (375 MB/s) für eingehende unkomprimierte Daten. Das Begleiten des Kernfahrers von Linux für den AHA361-PCIX ist ein '' Dienstprogramm und kundengerecht angefertigt '' fähig dazu, die Hardware-Kompression vom Apachen zu verwenden. Die Hardware basiert auf einem Xilinx Virtex FPGA und vier Gewohnheit AHA3601 ASICs. Die AHA361/AHA362 Ausschüsse werden auf nur das Berühren statischer Blöcke von Huffman beschränkt und verlangen, dass Software modifiziert wird, um Unterstützung hinzuzufügen — die Karten sind nicht im Stande gewesen, das volle zu unterstützen, Deflationieren Spezifizierung, die bedeutet, dass sie nur ihre eigene Produktion zuverlässig decodieren konnten (ein Strom, der keine dynamischen Blöcke des Typs 2 von Huffman enthalten hat).
  • StorCompress 300/MX3 von Indra Networks. Das ist eine Reihe von PCI (PCI-Personalausweis:) oder PCI-X Karte-Aufmachung zwischen einem und sechs Kompressionsmotoren mit geforderten in einer Prozession gehenden Geschwindigkeiten von bis zu 3.6 Gbit/s (450 MB/s). Eine Version der Karten ist mit der getrennten Marke WebEnhance verfügbar, der spezifisch für den webdienenden Gebrauch aber nicht SAN entworfen ist, oder unterstützt Gebrauch; eine PCIe Revision, der MX4E wird auch erzeugt.
  • AHA363-PCIe/AHA364-PCIe/AHA367-PCIe. 2008 hat Comtech angefangen, zwei PCIe Karten (/) mit einer neuen Hardware AHA3610 encoder Span zu erzeugen. Der neue Span wurde entworfen, um zu einem anhaltenden 2.5Gbit/s fähig zu sein. Mit zwei dieser Chips kann der AHA363-PCIe Ausschuss in einer Prozession gehen Deflationieren an einer Rate von bis zu 5.0 Gbit/s (625 MB/s) das Verwenden der zwei Kanäle (zwei Kompression und zwei Dekompression). Die AHA364-PCIe Variante ist eine Version des nur Verschlüsselns der Karte, die für die aus dem Amt schiede Last balancers entworfen ist, und hat stattdessen vielfache Register-Sete, um 32 unabhängige virtuelle Kompressionskanäle zu erlauben, die zwei physische Kompressionsmotoren füttern. Linux, Windows von Microsoft und Kerngerät-Fahrer von OpenSolaris sind für beide der neuen Karten zusammen mit einer modifizierten zlib Systembibliothek verfügbar, so dass dynamisch verbundene Anwendungen die Hardware-Unterstützung ohne innere Modifizierung automatisch verwenden können. Der AHA367-PCIe Ausschuss ist dem AHA363-PCIe ähnlich, aber verwendet vier AHA3610 Chips für eine anhaltende Kompressionsrate von 10 Gbit/s (1250 MB/s). Verschieden vom AHA362-PCIX sind die Dekompressionsmotoren auf dem AHA363-PCIe und AHA367-PCIe Ausschüsse völlig deflationieren entgegenkommend.

Decoder/decompressor

Blasen Sie auf ist der Entzifferungsprozess, der einen Deflationieren Bit-Strom für die Dekompression nimmt und richtig die ursprünglichen lebensgroßen Daten oder Datei erzeugt.

Durchführungen des nur Aufblasens

Die normale Absicht mit einer Alternative Bläst Durchführung Auf wird hoch optimiert, Geschwindigkeit decodierend, oder der äußerst voraussagbare RAM-Gebrauch für den Mikrokontrolleur hat Systeme eingebettet.

  • Zusammenbau
  • 6502, blasen geschrieben von Piotr Fusik auf 6502 Zusammenbau-Sprache auf.
  • Elektronika MK-90, blasen das obengenannte 6502 Programm auf, das von Piotr Piatek zur PDP-11 Architektur getragen ist.
  • SAMflate, die von Andrew Collier auf der Z80 Zusammenbau-Sprache mit der fakultativen Speicherpaginierung geschrieben sind, unterstützen für das SAM Coupé, und bereitgestellt laut der BSD/GPL/LGPL/DFSG-Lizenzen.
  • C/C ++
  • kunzip durch Michael Kohn und ohne Beziehung zu "KZIP". Kommt mit dem C Quellcode unter dem GNU LGPL Lizenz. Verwendet im GIMP Monteur.
  • lodepng durch Lode Vandevenne. Eine BSD-lizenzierte einzelne Datei PNG Dateileser mit eingebautem C ++ Bläst Durchführung und keine Außenabhängigkeiten Auf.
  • puff.c (zlib), ein kleiner, unbelastetes, Bezugsdurchführung der einzelnen Datei ins/contrib/puff Verzeichnis des zlib Vertriebs eingeschlossen.
  • tinf, der von Jørgen Ibsen in ANSI C geschrieben ist, und kommt mit der Zlib-Lizenz. Trägt über den 2k-Code bei.
  • Bob Flanders und Michael Holmes, der in der PC-Zeitschrift 1994-01-11 veröffentlicht ist.
  • inflate.cl durch John Foderaro. Allgemeiner Selbststehlispeln-Decoder hat mit einem GNU LGPL Lizenz verteilt.
  • pyflate, eine eigenständige reine Pythonschlange Deflationiert (gzip) und bzip2 Decoder durch Paul Sladen. Geschrieben für research/prototyping und bereitgestellt laut der BSD/GPL/LGPL/DFSG-Lizenzen.
  • deflatelua, eine reine-Lua Durchführung dessen Deflationiert und gzip/zlib Dekompression durch David Manura.

Hardware-Decoder

  • Serien-Blasen GPU von BitSim Auf. Hardware-Durchführung dessen bläst Auf. Ein Teil des ABZEICHENS von BitSim (Bitsim Beschleunigter Anzeigegrafikmotor) Kontrolleur, der sich für eingebettete Systeme bietet.

Siehe auch

  • Die Liste des Archivs formatiert
  • Liste der Datei archivers
  • Vergleich der Datei archivers

Außenverbindungen


Meierij / Cato der Ältere
Impressum & Datenschutz