www.wikidata.de-de.nina.az
Deflate englisch fur die Luft herauslassen ist ein Algorithmus zur verlustlosen Datenkompression Er wurde von Phil Katz fur das ZIP Archivformat entwickelt und spater der Gemeinfreiheit zugefuhrt Inhaltsverzeichnis 1 Beschreibung 2 Bitstromformat 2 1 Eliminierung doppelter Zeichenketten 2 2 Bitreduktion 2 3 Deflate64 Enhanced Deflate 3 Verwendung 3 1 Implementierungen 4 Geschichte 5 Weblinks 6 EinzelnachweiseBeschreibung BearbeitenBei Deflate handelt es sich um eine Kombination des Lempel Ziv Storer Szymanski Algorithmus und der Huffman Kodierung LZSS ersetzt dabei Zeichenfolgen die mehrmals vorkommen Danach erfolgt eine Entropiekodierung nach Huffman Es gibt eine Reihe von Parametern fur Deflate mit denen man Ausfuhrungsgeschwindigkeit und Reduktionsrate beeinflussen kann Fenstergrosse Je grosser das Datenfenster definiert wird in dem Deflate nach bereits vorhandenen Zeichenketten sucht desto erfolgversprechender ist das Auffinden einer solchen Kette aber desto langer braucht der Algorithmus auch zur Ausfuhrung Als Voreinstellung fur die Fenstergrosse werden meist 32 Kibibyte verwendet Suchintensitat Der Algorithmus kann das bereits erwahnte Fenster mehr oder weniger ausfuhrlich durchsuchen Wenn es etwa eher auf schnelle Ausfuhrung ankommt kann so zugunsten der Geschwindigkeit auf eine sehr gute Datenreduktion verzichtet werden Im Programm gzip kann diese Eigenschaft uber die Parameter 1 bis 9 vorgegeben werden 1 ist am schnellsten 9 ist am ausfuhrlichsten Huffmantabellen Diese konnen fur die vorliegenden Daten ermittelt werden oder es konnen Tabellen vorgegeben werden Letzteres spart etwas Zeit erzielt aber eventuell eine weniger gute Datenreduktion Komprimierung wird in zwei Schritten erreicht Finden und Ersetzen von doppelten Zeichenketten mit Verweisen Ersetzen von Symbolen Zeichen durch zum Teil kurzere nach der Haufigkeit des Auftretens gewichtete Symbole Bitstromformat BearbeitenEin Deflate Datenstrom Stream besteht aus einer Folge von Blocken Jedem Block ist ein 3 Bit Header vorangestellt 1 Bit Marker fur den letzten Block im Datenstrom 1 Das ist der letzte Block im Strom 0 Es folgen noch weitere Blocke 2 Bits Kodierungsmethode fur diesen Block 00 ein Literal Abschnitt der zwischen 0 und 65 535 Bytes lang ist 01 ein komprimierter Block der einen vordefinierten statischen Huffman Baum verwendet 10 komprimierter Block mit eigenem Huffman Baum 11 Reserviert zurzeit nicht verwendet Die meisten Blocke werden mit 10 der dynamic Huffman Methode kodiert Diese erzeugt fur jeden Block einen individuell optimierten Huffman Baum Anweisungen den notigen Huffman Baum aufzubauen folgen unmittelbar an den Blockheader Eliminierung doppelter Zeichenketten Bearbeiten Hauptartikel LZ77 und LZ78 Wird innerhalb eines zu komprimierenden Blocks eine Folge sich wiederholender Bytes entspricht einer sich wiederholenden Zeichenkette gefunden wird diese mit einer Ruckwartsreferenz ersetzt Diese zeigt auf ein vorheriges Vorkommen der Zeichenkette Ein Treffer auf eine vorherige Zeichenkette besteht aus Lange 3 bis 258 Bytes und einer Distanz 1 bis 32 768 Bytes Diese Ruckwartsreferenz kann sich uber beliebig viele Blocke erstrecken muss aber innerhalb der Distanz von 32 KiB innerhalb der bereits dekomprimierten Daten also innerhalb des sliding window liegen Bitreduktion Bearbeiten Hauptartikel Huffman Kodierung Die zweite Phase der Komprimierung besteht aus dem Ersetzen haufig genutzter Symbole Zeichen durch kurzere Darstellungsformen und seltenerer Symbole Zeichen durch Darstellungsformen die geringfugig mehr Platz benotigen Diese Methode der Huffman Kodierung erzeugt einen prafixlosen Baum mit sich nicht uberlappenden Abstanden in dem die Lange jeder Bitfolge umgekehrt proportional zu der Wahrscheinlichkeit des Auftretens des jeweiligen Symbols steht Je haufiger ein Symbol auftritt desto kurzer lasst sich dessen Bitfolge zum Kodieren darstellen Es wird ein Baum erzeugt der fur 288 Symbole Platz bietet 0 bis 255 reprasentiert ein Literal Symbol 0 bis 255 256 Ende des Blocks stoppt die Abarbeitung wenn es sich um den letzten Block handelt sonst wird die Verarbeitung mit dem nachsten Block fortgesetzt 257 bis 285 kombiniert mit Extra Bits einen Treffer mit 3 bis 258 Bytes 286 bis 287 nicht verwendet reserviert und ungultig aber trotzdem Teil des Baumes Der Trefferlange folgt immer die Distanz Abhangig vom Code werden moglicherweise weitere extra Bits gelesen um die endgultige Distanz zu ermitteln Der Distanzbaum besteht aus 32 Symbolen 0 bis 3 Entfernung 1 bis 4 4 bis 5 Entfernung 5 bis 8 1 Extra Bit 6 bis 7 Entfernung 9 bis 16 2 Extra Bits 8 bis 9 Entfernung 17 bis 32 3 Extra Bits 26 bis 27 Entfernung 8 193 bis 16 384 12 Extra Bits 28 bis 29 Entfernung 16 385 bis 32 768 13 Extra Bits 30 bis 31 nicht verwendet reserviert und ungultig aber trotzdem Teil des Baumes Man beachte dass fur die Symbole 2 bis 29 die Anzahl der Extra Bits wie folgt berechnet werden kann n 2 1 displaystyle left lfloor frac n 2 1 right rfloor nbsp Deflate64 Enhanced Deflate Bearbeiten Deflate64 ist eine proprietare Variante des Deflate Algorithmus Der zugrundeliegende Mechanismus bleibt unverandert 1 Einzige Veranderungen sind Erweiterung des Worterbuchs von 32 KiB auf 64 KiB Erweiterung des Distanzbaums Die bei Deflate fur zukunftige Verwendung reservierten Distanzsymbole 30 und 31 im Distanzbaum werden jetzt mit je 14 Extra Bits belegt um Entfernungen von 32 KiB bis 64 KiB adressieren zu konnen Erweiterung des Symbolbaums Das Symbol 285 wird um 16 Extra Bits erweitert Damit wird die ursprungliche Limitierung auf 258 Byte hinfallig und es konnen Sequenzlangen im Bereich von 3 bis 65 538 Bytes adressiert werden Im Vergleich zu Deflate verbessert sich bei Deflate64 die Kompressionsrate geringfugig Gleichzeitig dauert die Komprimierung aber auch etwas langer Neben PKZIP und einer Vielzahl kommerzieller Anwendungen unterstutzen auch viele Open Source Projekte wie zum Beispiel 7 Zip oder Info ZIP Deflate64 Zlib unterstutzt Deflate64 nicht Grund ist die zu geringe Gesamtverbesserung und die Entscheidung Deflate64 als proprietares Format zu behandeln Verwendung BearbeitenDeflate wird unter anderem in folgenden gebrauchlichen Formaten benutzt im Archivformat ZIP gzip Dateien dem Bilddateiformat PNG dem Bilddateiformat TIFF in OpenDocument dem ISO Standardformat fur Office Dateien dem Portable Document Format PDF dem Web Open Font Format und dem Archivformat CAB Es ist das gebrauchliche Verfahren fur komprimierte HTTP Ubertragungen siehe Artikel Hypertext Transfer Protocol Abschnitt HTTP Kompression Implementierungen Bearbeiten Die freie Programmbibliothek zlib abstrahiert die Benutzung von Deflate fur die Verwendung in anderen Programmen Uber 500 Programme benutzen den Algorithmus auf diesem Wege 2 Die historische erste Implementierung erfolgte in Phil Katz PKZIP Es existiert eine Vielzahl weiterer Implementierungen in einer Reihe unterschiedlicher Programmiersprachen namentlich unter anderem in Java 3 Ada 4 Pascal 5 JavaScript 6 7 und Seed7 8 oder mit anderen Spezialisierungen 7 Zip enthalt eine eigene Implementierung die fur die Einfuhrung einer starkeren rechenintensiveren Kompressionsstufe bekannt wurde KZIP von Ken Silverman ist eine spezialisierte eigene Implementierung die auf kleinstmogliche Dateigrossen zielt und einige Zeit als das beste verfugbare Werkzeug fur diese Nische galt Die freie Referenzimplementierung des Zopfli Algorithmus komprimiert ublicherweise noch kompakter Geschichte BearbeitenKatz implementierte nach Vorbild von LHA den 1982 veroffentlichten Lempel Ziv Storer Szymanski Algorithmus der eine Verbesserung gegenuber dem alten Lempel Ziv Algorithmus von 1977 darstellte Deflate wurde 1993 mit Version 2 der Software PKZIP von Phil Katz Firma PKWare Inc eingefuhrt Die exakte Spezifikation von Deflate und dem zugehorigen Bitstrom Format ist im RFC 1951 9 vom Mai 1996 festgehalten Weblinks BearbeitenP Deutsch RFC 1951 DEFLATE Compressed Data Format Specification version 1 3 Mai 1996 englisch Detaillierte Erlauterung des Algorithmus zlib net englisch Beispiel Implementierung in C sowie Veranschaulichung eines Datenblocks m einfalt deEinzelnachweise Bearbeiten Binary Essence Deflate64 Memento vom 7 Februar 2015 im Internet Archive zlib net jcraft com unzip ada sourceforge net seekxl de github com gildas lormeau github com seed7 sourceforge net P Deutsch RFC 1951 DEFLATE Compressed Data Format Specification version 1 3 Mai 1996 englisch Abgerufen von https de wikipedia org w index php title Deflate amp oldid 234785211