LZH ist ein verlustfreies Datenkomprimierungsarchivformat, das nach Lempel-Ziv-Huffman benannt ist, den Algorithmen, auf denen es basiert. Es wurde erstmals 1987 von Haruyasu Yoshizaki als Verbesserung gegenüber den früheren Komprimierungsformaten LZ77 und LZ78 veröffentlicht, die Ende der 1970er Jahre von Abraham Lempel und Jacob Ziv entwickelt wurden. LZH bot effizientere Komprimierungsverhältnisse und ermöglichte gleichzeitig eine schnelle Dekomprimierung.
Die in LZH verwendeten Kernkomprimierungsalgorithmen basieren auf Wörterbüchern und nutzen zuvor gesehene Daten, um zukünftige Daten kompakter zu kodieren. Der Encoder verwaltet einen gleitenden Fensterpuffer der zuletzt verarbeiteten Daten. Wenn neue Daten gefunden werden, sucht der Encoder nach der längsten übereinstimmenden Sequenz im gleitenden Fenster. Wenn eine Übereinstimmung gefunden wird, werden die Daten als Referenz auf die übereinstimmende Fensterposition und -länge kodiert, anstatt als wörtliche Daten. Diese Referenz benötigt normalerweise weniger Speicherplatz als der ursprüngliche Inhalt.
LZ77, das als Grundlage für LZH verwendet wird, verfügt über eine Kodierungsschleife, die wie folgt aussieht: 1. Durchsuche das gleitende Fenster nach der längsten Übereinstimmung mit der bevorstehenden Eingabe 2. Gib das (Offset, Länge)-Paar aus, das sich auf die Übereinstimmung bezieht 3. Wenn keine Übereinstimmung gefunden wird, gib ein wörtliches Byte aus 4. Verschiebe das Fenster um die Übereinstimmungslänge nach vorne
1986 veröffentlichte Terry Welch einen verbesserten LZW-Algorithmus, der die Arbeit von LZ78 adaptierte. Er verwendete Indexnummern in einem Wörterbuch mit Zeichenfolgen, um eine höhere Dichte als LZ77 zu erreichen. Im nächsten Jahr wurde LZH veröffentlicht, das den gleitenden Wörterbuchansatz von LZ77 übernahm, aber als zusätzlichen Schritt die Huffman-Kodierung auf die LZ77-Symbole hinzufügte, um die Komprimierungsverhältnisse zu verbessern.
Die Huffman-Kodierung weist häufig verwendeten Symbolen kurze Bitfolgen und seltenen Symbolen längere Folgen zu. In LZH sind die möglichen Symbole wörtliche Bytes, End-of-Block-Markierungen und Übereinstimmungsreferenzen im gleitenden Fensterwörterbuch. Das Huffman-Kodierungsmodell wird für jeden Datenblock eindeutig basierend auf der Symbolhäufigkeitsverteilung dieses Blocks berechnet. Häufigeren Übereinstimmungsreferenzen werden kürzere Bitcodes zugewiesen. Dieser Entropiekodierungsschritt wird nach dem Abgleich mit dem gleitenden Fenster angewendet.
Die Dekomprimierung analysiert die Huffman-Codes variabler Länge aus dem Eingabestream und übersetzt sie zurück in wörtliche Bytes und Übereinstimmungsreferenzen. Referenzen werden aufgelöst, indem im Fensterpuffer auf die dekodierten Daten zurückgeblickt und die Übereinstimmung in die Ausgabe kopiert wird. Das Fenster wird nach jedem Symbol nach vorne verschoben. Die Dekomprimierung ist schnell, da keine Suche nach Übereinstimmungen erforderlich ist.
LZH-Dateien enthalten eine Reihe von Blöcken, die jeweils unabhängig mit diesem LZ77+Huffman-Modell komprimiert werden. Separate Blöcke ermöglichen wahlfreien Zugriff und Fehlerbehebung. Jeder Block beginnt mit einem Header, der die Huffman-Kodierungstabellen speichert, die zum Dekodieren der Daten dieses Blocks erforderlich sind.
Das Standard-LZH-Format ermöglicht eine gleitende Fenstergröße von 13 Bit oder 8.192 Bytes. Das Fenster wird normalerweise zu Beginn jedes Blocks auf alle Nullbytes initialisiert. Es wird kein voreingestelltes Wörterbuch verwendet, sondern nur zuvor komprimierte Daten. Übereinstimmungsreferenzen sind auf eine Länge von höchstens 256 Bytes beschränkt.
Nelson H.F. Beebe erweiterte LZH, um beliebig große gleitende Fenstergrößen zu unterstützen, und nannte sein Format LZHXa. Fenstergrößen sind auf Zweierpotenzen beschränkt, wobei 2^15 (32.768) und 2^16 (65.536) Bytes üblich sind. Durch Vergrößern des Fensters wird die Komprimierung verbessert, da mehr Verlaufsdaten durchsucht werden, was jedoch zu einer langsameren Kodierung und einem höheren Speicherverbrauch führt.
LZH enthält Prüfsummen, um die Datenintegrität zu überprüfen. Jeder Block endet mit einem 16-Bit-CRC-Code. Mehrdateiarchive speichern eine zusätzliche CRC für jede vollständige Datei. Die meisten Implementierungen verwenden CRC-16 mit dem Polynom x^16 + x^15 + x^2 + 1, einige verwenden jedoch CRC-16-CCITT.
Komprimierte LZH-Archive verwenden herkömmlicherweise die Dateierweiterung .lzh. Das Format fand in Japan die größte Verbreitung und erreichte Anfang der 1990er Jahre seinen Höhepunkt, als es mit ZIP und ARJ konkurrierte. Es entwickelte sich ein informeller Standard namens LHA, der von den beliebten Archivierern LArc und LHarc verwendet wurde. Es fügte Unterstützung für Kommentare, Zeitstempel, Passwörter und Mehrdateiarchive hinzu.
Die Hauptvorteile von LZH waren seine im Vergleich zu ZIP höheren Komprimierungsverhältnisse sowie die schnelle Dekomprimierung. Mitte der 1990er Jahre gewann ZIP jedoch an Popularität und verdrängte die meisten anderen Formate. Die schnelle Übernahme von ZIP als Standard unter Windows sowie die plattformübergreifende Bibliotheks- und Tool-Unterstützung führten dazu, dass es den Markt für verlustfreie Komprimierung dominierte.
Heute wird LZH außerhalb Japans und Ostasiens kaum noch verwendet. Neue Komprimierungsformate wie bzip2, LZMA und andere bieten deutlich bessere Komprimierungsverhältnisse. Einige Legacy-Anwendungen können immer noch auf .lzh-Dateien stoßen, für die Archivierung werden jedoch moderne ZIP-, 7z- oder xz-Formate empfohlen. Es gibt Open-Source-Tools wie lhasa, um alte .lzh-Archive zu extrahieren.
Zusammenfassend lässt sich sagen, dass LZH innovativ die Lempel-Ziv-Wörterbuchkodierung mit der Huffman-Bitreduktion kombinierte, um bei seiner Einführung eine hochmoderne Komprimierung zu erreichen. Es wurde kurzzeitig übernommen, insbesondere in Japan, bevor es vom ZIP-Standard überholt wurde. Es spielte jedoch eine wichtige Rolle in der Geschichte der Datenkomprimierung und der Entwicklung moderner Archivformate. LZH zeigte Techniken wie gleitende Fensterwörterbücher und Symbolentropiekodierung, die nach wie vor grundlegend für die effiziente Komprimierung von Daten sind.
Die Dateikomprimierung ist ein Prozess, der die Größe von Datendateien für eine effiziente Speicherung oder Übertragung reduziert. Sie verwendet verschiedene Algorithmen zur Datenkondensierung durch Identifizierung und Eliminierung von Redundanzen, was oft die Größe der Daten erheblich verkleinern kann, ohne die ursprünglichen Informationen zu verlieren.
Es gibt zwei Hauptarten der Dateikomprimierung: verlustfrei und verlustbehaftet. Verlustfreie Komprimierung ermöglicht die vollständige Rekonstruktion der Originaldaten aus den komprimierten Daten, was ideal für Dateien ist, bei denen jedes Bit an Daten wichtig ist, wie Text- oder Datenbankdateien. Häufige Beispiele schließen ZIP- und RAR-Dateiformate ein. Andererseits eliminiert verlustbehaftete Komprimierung weniger wichtige Daten, um die Dateigröße stärker zu reduzieren, was oft bei Audio-, Video- und Bilddateien verwendet wird. JPEGs und MP3s sind Beispiele, bei denen ein gewisser Datenverlust die perzeptuelle Qualität des Inhalts nicht wesentlich beeinträchtigt.
Dateikomprimierung ist in vielerlei Hinsicht vorteilhaft. Sie spart Speicherplatz auf Geräten und Servern, senkt die Kosten und verbessert die Effizienz. Sie beschleunigt auch die Dateiübertragungszeiten über Netzwerke, einschließlich des Internets, was besonders wertvoll für große Dateien ist. Darüber hinaus können komprimierte Dateien in einer Archivdatei zusammengefasst werden, was die Organisation und den einfacheren Transport mehrerer Dateien unterstützt.
Dennoch hat die Dateikomprimierung auch einige Nachteile. Der Komprimierungs- und Dekomprimierungsprozess benötigt Rechenressourcen, was die Systemleistung verlangsamen könnte, insbesondere bei größeren Dateien. Außerdem gehen bei der verlustbehafteten Komprimierung einige Originaldaten verloren, und die resultierende Qualität ist möglicherweise nicht für alle Verwendungen akzeptabel, insbesondere für professionelle Anwendungen, die hohe Qualität erfordern.
Die Dateikomprimierung ist ein entscheidendes Werkzeug in der heutigen digitalen Welt. Sie steigert die Effizienz, spart Speicherplatz und verringert Download- und Upload-Zeiten. Dennoch hat sie ihre eigenen Nachteile in Bezug auf die Systemleistung und das Risiko einer Qualitätsdegradation. Daher ist es wichtig, diese Faktoren zu berücksichtigen, um die richtige Komprimierungstechnik für spezifische Datenanforderungen zu wählen.
Dateikompression ist ein Prozess, der die Größe einer Datei oder Dateien reduziert, normalerweise um Speicherplatz zu sparen oder die Übertragung über ein Netzwerk zu beschleunigen.
Die Dateikompression funktioniert, indem sie Redundanzen in den Daten identifiziert und entfernt. Sie verwendet Algorithmen, um die ursprünglichen Daten in einem kleineren Raum zu kodieren.
Die beiden primären Arten der Dateikompression sind verlustfreie und verlustbehaftete Kompression. Verlustfreie Kompression ermöglicht die perfekte Wiederherstellung der Originaldatei, während verlustbehaftete Kompression eine größere Größenreduktion ermöglicht, dies jedoch auf Kosten eines Qualitätsverlusts bei den Daten.
Ein populäres Beispiel für ein Dateikompressionstool ist WinZip, das mehrere Kompressionsformate unterstützt, darunter ZIP und RAR.
Bei verlustfreier Kompression bleibt die Qualität unverändert. Bei verlustbehafteter Kompression kann es jedoch zu einem spürbaren Qualitätsverlust kommen, da weniger wichtige Daten zur Reduzierung der Dateigröße stärker eliminieren werden.
Ja, die Dateikompression ist sicher in Bezug auf die Datenintegrität, insbesondere bei der verlustfreien Kompression. Wie alle Dateien können jedoch auch komprimierte Dateien von Malware oder Viren angegriffen werden. Daher ist es immer wichtig, eine seriöse Sicherheitssoftware zu haben.
Fast alle Arten von Dateien können komprimiert werden, einschließlich Textdateien, Bilder, Audio, Video und Softwaredateien. Das erreichbare Kompressionsniveau kann jedoch zwischen den Dateitypen erheblich variieren.
Eine ZIP-Datei ist ein Dateiformat, das verlustfreie Kompression verwendet, um die Größe einer oder mehrerer Dateien zu reduzieren. Mehrere Dateien in einer ZIP-Datei werden effektiv zu einer einzigen Datei gebündelt, was das Teilen einfacher macht.
Technisch ja, obwohl die zusätzliche Größenreduktion minimal oder sogar kontraproduktiv sein könnte. Das Komprimieren einer bereits komprimierten Datei kann manchmal deren Größe erhöhen, aufgrund der durch den Kompressionsalgorithmus hinzugefügten Metadaten.
Um eine Datei zu dekomprimieren, benötigen Sie in der Regel ein Dekompressions- oder Entzip-Tool, wie WinZip oder 7-Zip. Diese Tools können die Originaldateien aus dem komprimierten Format extrahieren.