Der Klartext Ihrer mitgelieferten kodierten Datei enkodiert mit Ihrem Huffman Baum lautet:
Das Verfahren lohnt sich in der vorgestellten Form nur fuer Texte mit einer gewissen Laenge. Ansonsten ist der Overhead fuer die Erstellung der Tabelle zu gross.
Man koennte sich aber auch ueberlegen, die Tabelle geschickter abzuspeichern. Ansonsten: Gut gemacht!
Wenn Sie das Programm im decompress
Modus starten, werden initial Ihre Files verwendet bzw. der oben stehende Output generiert.
Das Programm wird über die Main
Klasse gestartet. Die Steuerung der Funktionalität erfolgt anschliessend über "Program Arguments".
Liest das input.txt
File, wendet die Huffman Kodierung an und schreibt das Resultat nach output.dat
für den Inhalt und nach dec_tab.txt
für den Huffman Baum.
Das input.txt
File muss zu Beginn des Programmes existieren - die anderen werden generiert.
Liest das den Content vom output.dat
File und den Huffman Baum vom dec_tab.txt
File. Existiert eines dieser Files nicht, bricht das Programm ab.
Anschliessend wird der mittels des gelesenen Baumes jedes Zeichen wieder dekodiert.
Der dekodierte Text landet im decompressed.txt
File.
Führt die beiden oben beschriebenen Schritte nacheinander aus. Somit ist gut ersichtlich, dass input.txt
und decompress.txt
identisch herauskommen.
Aus Testzwecken habe ich verschiedene Texte en- und dekodiert und die Platzersparnis beobachtet. Das Resultat ist in untenstehender Tabelle ersichtlich.
Beschreibung des Files | Raw-Size | Compressed Size (inkl. Tree) | Ersparnis |
---|---|---|---|
Lorem ipsum text mit > 200'000 Wörtern. | ca. 1’448KB | ca. 764KB (davon 437 bytes tree) | 47% (!!) |
Lorem ipsum text mit 50 Wörtern | 295 bytes | 428 bytes (davon 275 bytes tree) | keines (ca. 45% overhead) |
Eine Ihrer E-Mails an die Klasse mit 121 Wörtern | 901 bytes | 1'033 bytes (davon 521 bytes tree) | keines (ca. 14% overhead) |
Ein Artikel zum IoT-Betriebssystem 'Contiki' (gerade für ein anderes Modul in Verwendung), 550 Wörter, auf Englisch | 3.8KB | 2.8KB (davon 707 bytes tree) | ca. 26% |
Somit wird klar, dass sich dieses Verfahren erst für Texte ab einer gewissen Grösse lohnt (wie Sie bereits in Ihrem komprimierten Test-Text geschrieben haben).
Das korrekte Verhalten ist lediglich für Characters des ASCII Zeichensatzes garantiert.