<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Deflate</id>
	<title>Deflate - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Deflate"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Deflate&amp;action=history"/>
	<updated>2026-05-23T16:01:20Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Deflate&amp;diff=229174&amp;oldid=prev</id>
		<title>imported&gt;SchlurcherBot: Bot: http → https</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Deflate&amp;diff=229174&amp;oldid=prev"/>
		<updated>2026-04-20T03:31:07Z</updated>

		<summary type="html">&lt;p&gt;Bot: http → https&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Deflate&amp;#039;&amp;#039;&amp;#039; ({{enS}} für „die Luft herauslassen“) ist ein [[Algorithmus]] zur verlustlosen [[Datenkompression]]. Er wurde von [[Phil Katz]] für das [[ZIP-Dateiformat|ZIP]]-Archivformat entwickelt und im Jahr 1989&amp;lt;ref&amp;gt;{{Internetquelle |url=https://brianlivingston.com/eweek/article2/0,4149,1257562,00.html |titel=PKZip Must Open Up |abruf=2023-12-13}}&amp;lt;/ref&amp;gt; der [[Gemeinfreiheit]] zugeführt.&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
Bei Deflate handelt es sich um eine Kombination des [[Lempel-Ziv-Storer-Szymanski-Algorithmus]] und der [[Huffman-Kodierung]].&lt;br /&gt;
&lt;br /&gt;
LZSS ersetzt dabei Zeichenfolgen, die mehrmals vorkommen. Danach erfolgt eine [[Entropiekodierung]] nach [[David A. Huffman|Huffman]].&lt;br /&gt;
&lt;br /&gt;
Es gibt eine Reihe von Parametern für Deflate, mit denen man Ausführungsgeschwindigkeit und Reduktionsrate beeinflussen kann:&lt;br /&gt;
; Fenstergröße&lt;br /&gt;
: Je größer das Datenfenster definiert wird, in dem Deflate nach bereits vorhandenen Zeichenketten sucht, desto erfolgversprechender ist das Auffinden einer solchen Kette, aber desto länger braucht der Algorithmus auch zur Ausführung. Als Voreinstellung für die Fenstergröße werden meist 32&amp;amp;nbsp;[[Byte#Binärpräfixe|Kibibyte]] verwendet.&lt;br /&gt;
; Suchintensität&lt;br /&gt;
: Der Algorithmus kann das bereits erwähnte Fenster mehr oder weniger ausführlich durchsuchen. Wenn es etwa eher auf schnelle Ausführung ankommt, kann so zugunsten der Geschwindigkeit auf eine sehr gute Datenreduktion verzichtet werden. Im Programm [[gzip]] kann diese Eigenschaft über die Parameter (-#) 1 bis 9 vorgegeben werden: 1 ist am schnellsten, 9 ist am ausführlichsten.&lt;br /&gt;
; Huffmantabellen&lt;br /&gt;
: Diese können für die vorliegenden Daten ermittelt werden oder es können Tabellen vorgegeben werden. Letzteres spart etwas Zeit, erzielt aber eventuell eine weniger gute Datenreduktion.&lt;br /&gt;
&lt;br /&gt;
Komprimierung wird in zwei Schritten erreicht:&lt;br /&gt;
# Finden und Ersetzen von doppelten Zeichenketten mit Verweisen.&lt;br /&gt;
# Ersetzen von Symbolen (Zeichen) durch zum Teil kürzere, nach der Häufigkeit des Auftretens gewichtete Symbole.&lt;br /&gt;
&lt;br /&gt;
== Bitstromformat ==&lt;br /&gt;
Ein Deflate-Datenstrom (Stream) besteht aus einer Folge von Blöcken. Jedem Block ist ein 3-[[Bit]]-Header vorangestellt:&lt;br /&gt;
* 1&amp;amp;nbsp;Bit: Marker für den letzten Block im Datenstrom:&lt;br /&gt;
** &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Das ist der letzte Block im Strom.&lt;br /&gt;
** &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;: Es folgen noch weitere Blöcke.&lt;br /&gt;
* 2&amp;amp;nbsp;Bits: Kodierungsmethode für diesen Block:&lt;br /&gt;
** &amp;lt;code&amp;gt;00&amp;lt;/code&amp;gt;: ein Literal-Abschnitt, der zwischen 0 und 65.535&amp;amp;nbsp;Bytes lang ist.&lt;br /&gt;
** &amp;lt;code&amp;gt;01&amp;lt;/code&amp;gt;: ein komprimierter Block, der einen vordefinierten statischen Huffman-Baum verwendet.&lt;br /&gt;
** &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;: komprimierter Block, mit eigenem Huffman-Baum.&lt;br /&gt;
** &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;: Reserviert, zurzeit nicht verwendet.&lt;br /&gt;
&lt;br /&gt;
Die meisten Blöcke werden mit &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;, der &amp;#039;&amp;#039;dynamic-Huffman&amp;#039;&amp;#039;-Methode kodiert.&lt;br /&gt;
Diese erzeugt für jeden Block einen individuell optimierten Huffman-Baum. Anweisungen, den nötigen Huffman-Baum aufzubauen, folgen unmittelbar an den Blockheader.&lt;br /&gt;
&lt;br /&gt;
=== Eliminierung doppelter Zeichenketten ===&lt;br /&gt;
{{Hauptartikel|LZ77|LZ78}}&lt;br /&gt;
&lt;br /&gt;
Wird innerhalb eines zu komprimierenden Blocks eine Folge sich wiederholender Bytes (entspricht einer sich wiederholenden Zeichenkette) gefunden, wird diese mit einer Rückwärts[[Referenz (Programmierung)|referenz]] ersetzt. Diese zeigt auf ein vorheriges Vorkommen der Zeichenkette. Ein Treffer auf eine vorherige Zeichenkette besteht aus Länge (3 bis 258&amp;amp;nbsp;Bytes) und einer Distanz (1 bis 32.768&amp;amp;nbsp;Bytes). Diese Rückwärtsreferenz kann sich über beliebig viele Blöcke erstrecken, muss aber innerhalb der Distanz von 32[[Kibibyte|&amp;amp;nbsp;KiB]] innerhalb der bereits dekomprimierten Daten (also innerhalb des &amp;#039;&amp;#039;sliding window&amp;#039;&amp;#039;) liegen.&lt;br /&gt;
&lt;br /&gt;
=== Bitreduktion ===&lt;br /&gt;
{{Hauptartikel|Huffman-Kodierung}}&lt;br /&gt;
&lt;br /&gt;
Die zweite Phase der Komprimierung besteht aus dem Ersetzen häufig genutzter Symbole (Zeichen) durch kürzere Darstellungsformen und seltenerer Symbole (Zeichen) durch Darstellungsformen, die geringfügig mehr Platz benötigen. Diese Methode der [[Huffman-Kodierung]] erzeugt einen präfixlosen Baum mit sich nicht überlappenden Abständen, in dem die Länge jeder Bitfolge umgekehrt proportional zu der Wahrscheinlichkeit des Auftretens des jeweiligen Symbols steht: Je häufiger ein Symbol auftritt, desto kürzer lässt sich dessen Bitfolge zum Kodieren darstellen.&lt;br /&gt;
&lt;br /&gt;
Es wird ein Baum erzeugt, der für 288 Symbole Platz bietet:&lt;br /&gt;
* 0 bis 255: repräsentiert ein Literal/Symbol 0 bis 255.&lt;br /&gt;
* 256: Ende des Blocks – stoppt die Abarbeitung, wenn es sich um den letzten Block handelt, sonst wird die Verarbeitung mit dem nächsten Block fortgesetzt.&lt;br /&gt;
* 257 bis 285: kombiniert mit Extra-Bits einen Treffer mit 3 bis 258&amp;amp;nbsp;Bytes.&lt;br /&gt;
* 286 bis 287: nicht verwendet, reserviert und ungültig, aber trotzdem Teil des Baumes.&lt;br /&gt;
&lt;br /&gt;
Der Trefferlänge folgt immer die Distanz.&lt;br /&gt;
Abhängig vom Code werden möglicherweise weitere extra Bits gelesen, um die endgültige Distanz zu ermitteln. Der Distanzbaum besteht aus 32 Symbolen:&lt;br /&gt;
* 0 bis 3: Entfernung 1 bis 4&lt;br /&gt;
* 4 bis 5: Entfernung 5 bis 8, 1 Extra-Bit&lt;br /&gt;
* 6 bis 7: Entfernung 9 bis 16, 2 Extra-Bits&lt;br /&gt;
* 8 bis 9: Entfernung 17 bis 32, 3 Extra-Bits&lt;br /&gt;
* …&lt;br /&gt;
* 26 bis 27: Entfernung 8.193 bis 16.384, 12&amp;amp;nbsp;Extra-Bits&lt;br /&gt;
* 28 bis 29: Entfernung 16.385 bis 32.768, 13&amp;amp;nbsp;Extra-Bits&lt;br /&gt;
* 30 bis 31: nicht verwendet, reserviert und ungültig, aber trotzdem Teil des Baumes.&lt;br /&gt;
&lt;br /&gt;
Man beachte, dass für die Symbole 2 bis 29 die Anzahl der Extra-Bits wie folgt berechnet werden kann: &amp;lt;math&amp;gt;\left \lfloor\frac{n}{2}-1 \right \rfloor&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Deflate64/Enhanced Deflate ===&lt;br /&gt;
Deflate64 ist eine proprietäre Variante des Deflate-Algorithmus. Der zugrundeliegende Mechanismus bleibt unverändert.&amp;lt;ref&amp;gt;{{Webarchiv |url=http://binaryessence.com/dct/imp/en000225.htm |text=Binary Essence – Deflate64 |wayback=20150207095225}}&amp;lt;/ref&amp;gt; Einzige Veränderungen sind:&lt;br /&gt;
* Erweiterung des Wörterbuchs von 32 KiB auf 64 KiB.&lt;br /&gt;
* Erweiterung des Distanzbaums: Die bei Deflate für zukünftige 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 können.&lt;br /&gt;
* Erweiterung des Symbolbaums: Das Symbol 285 wird um 16 Extra-Bits erweitert. Damit wird die ursprüngliche Limitierung auf 258 Byte hinfällig und es können Sequenzlängen im Bereich von 3 bis 65.538 Bytes adressiert werden.&lt;br /&gt;
&lt;br /&gt;
Im Vergleich zu Deflate verbessert sich bei Deflate64 die Kompressionsrate geringfügig. Gleichzeitig dauert die Komprimierung aber auch etwas länger.&lt;br /&gt;
&lt;br /&gt;
Neben [[PKZIP]] und einer Vielzahl kommerzieller Anwendungen unterstützen auch viele Open-Source-Projekte wie zum Beispiel [[7-Zip]] oder [[Info-ZIP]] Deflate64.&lt;br /&gt;
&lt;br /&gt;
Zlib unterstützt Deflate64 nicht. Grund ist die zu geringe Gesamtverbesserung und die Entscheidung, Deflate64 als proprietäres Format zu behandeln.&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
Deflate wird unter anderem in folgenden gebräuchlichen Formaten benutzt:&lt;br /&gt;
* im Archivformat [[ZIP-Dateiformat|ZIP]],&lt;br /&gt;
* [[gzip]]-Dateien,&lt;br /&gt;
* dem Bilddateiformat [[Portable Network Graphics|PNG]],&lt;br /&gt;
* dem Bilddateiformat [[Tagged Image File Format|TIFF]],&lt;br /&gt;
* in [[OpenDocument]], dem ISO-Standardformat für Office-Dateien,&lt;br /&gt;
* dem [[Portable Document Format]] (PDF),&lt;br /&gt;
* dem [[Web Open Font Format]] und&lt;br /&gt;
* dem Archivformat [[CAB (Dateiformat)|CAB]].&lt;br /&gt;
&lt;br /&gt;
Es ist das gebräuchliche Verfahren für komprimierte HTTP-Übertragungen, siehe [[Hypertext Transfer Protocol#HTTP-Kompression|Artikel &amp;#039;&amp;#039;Hypertext Transfer Protocol&amp;#039;&amp;#039;, Abschnitt &amp;#039;&amp;#039;HTTP-Kompression&amp;#039;&amp;#039;]].&lt;br /&gt;
&lt;br /&gt;
=== Implementierungen ===&lt;br /&gt;
Die [[Freie Software|freie]] Programmbibliothek [[zlib]] abstrahiert die Benutzung von Deflate für die Verwendung in anderen Programmen. Über 500 Programme benutzen den Algorithmus auf diesem Wege.&amp;lt;ref&amp;gt;[https://zlib.net/apps.html zlib.net]&amp;lt;/ref&amp;gt; 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,&amp;lt;ref&amp;gt;[http://www.jcraft.com/jzlib/ jcraft.com]&amp;lt;/ref&amp;gt; Ada,&amp;lt;ref&amp;gt;[https://unzip-ada.sourceforge.net/ unzip-ada.sourceforge.net]&amp;lt;/ref&amp;gt; Pascal,&amp;lt;ref&amp;gt;[https://www.seekxl.de/blog/the-nomssi-viewer/ seekxl.de]&amp;lt;/ref&amp;gt; JavaScript&amp;lt;ref&amp;gt;[https://github.com/nodeca/pako github.com]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://gildas-lormeau.github.com/zip.js gildas-lormeau.github.com]/&amp;lt;/ref&amp;gt; und Seed7,&amp;lt;ref&amp;gt;[https://seed7.sourceforge.net/libraries/deflate.htm seed7.sourceforge.net]&amp;lt;/ref&amp;gt; oder mit anderen Spezialisierungen. [[7-Zip]] enthält eine eigene Implementierung, die für die Einführung einer stärkeren, rechenintensiveren Kompressionsstufe bekannt wurde. KZIP von [[Ken Silverman]] ist eine spezialisierte eigene Implementierung, die auf kleinstmögliche Dateigrößen zielt und einige Zeit als das beste verfügbare Werkzeug für diese Nische galt. Die freie Referenzimplementierung des [[Zopfli]]-Algorithmus komprimiert üblicherweise noch kompakter.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
Katz implementierte nach Vorbild von [[LHa (Kompressionsprogramm)|LHA]] den 1982 veröffentlichten [[Lempel-Ziv-Storer-Szymanski-Algorithmus]], der eine Verbesserung gegenüber dem alten [[LZ77|Lempel-Ziv-Algorithmus von 1977]] darstellte.&lt;br /&gt;
Deflate wurde 1993 mit Version&amp;amp;nbsp;2 der Software [[PKZIP]] von [[Phil Katz]]’ Firma &amp;#039;&amp;#039;PKWare Inc.&amp;#039;&amp;#039; eingeführt.&lt;br /&gt;
Die exakte Spezifikation von Deflate und dem zugehörigen Bitstrom-Format ist im &amp;lt;nowiki&amp;gt;RFC&amp;amp;nbsp;1951&amp;lt;/nowiki&amp;gt;&amp;lt;ref&amp;gt;{{RFC-Internet |RFC=1951 |Titel=DEFLATE Compressed Data Format Specification version 1.3 |Datum=1996-05 |Autor=P. Deutsch}}&amp;lt;/ref&amp;gt; vom Mai 1996 festgehalten.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{RFC-Internet |Autor=P. Deutsch |RFC=1951 |Titel=DEFLATE Compressed Data Format Specification version 1.3 |Datum=1996-05}}&lt;br /&gt;
* [https://zlib.net/feldspar.html Detaillierte Erläuterung des Algorithmus.] zlib.net (englisch)&lt;br /&gt;
* [https://m-einfalt.de/?deflate Beispiel-Implementierung in C++ sowie Veranschaulichung eines Datenblocks.] m-einfalt.de&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Freie Datenkompressionssoftware]]&lt;br /&gt;
[[Kategorie:Kompressionsalgorithmus]]&lt;/div&gt;</summary>
		<author><name>imported&gt;SchlurcherBot</name></author>
	</entry>
</feed>