2016-06-28 4 views
-2

Ich erstelle ein einfaches Huffman-Codier-/Decodierungswerkzeug. Ich habe this Frage gefunden, die mir geholfen hat, eine Überschrift zu implementieren, die meinen erzeugten huffman Baum in der binären Form speichert. Ich kann den Baum auch verwenden, um einen Text in eine binäre Datei zu kodieren/zu decodieren. Das Programm funktioniert also, aber ich habe immer noch ein Problem.Unterscheidung von binärem Header und codiertem Binärcode in Huffman

Gegenwärtig befinden sich die Kopfzeile und die codierte Binärdatei in separaten Dateien, da ich keine Möglichkeit finde, sie in dieselbe Datei zu schreiben, so dass ich die Kopfzeile zu Beginn der Decodierung leicht lesen kann. Hartes Codieren in irgendeinem "Kopfende" -Zeichen erscheint als eine ziemlich hackige Weise, dies zu tun, ganz zu schweigen davon, dass es die Möglichkeit gibt, dass einige Anfangsbits des abschließenden Zeichens als Teil des codierten Baums in der Kopfzeile eingelesen werden können , wodurch der gesamte Baum beschädigt wird.

Obwohl mein Programm mit separaten Header- und Body-Dateien arbeitet, möchte ich sie zusammenführen. Irgendwelche Ideen, wie ich das machen kann?

Antwort

1

Sie müssen nichts Besonderes tun, um Ihre Kopfzeile (den Baum) und den Inhalt (den Huffman-kodierten Text) zusammenzuführen.

Wenn Sie in der Antwort auf die Frage suchen Sie auf dem Laufenden, here und den Algorithmus zur Decodierung untersuchen (die ReadNode(BitReader reader) Pseudo-Code-Funktion gibt) können Sie sehen, dass der Algorithmus stoppt den Baum zu lesen, nur weil es alles liest - nicht, weil es ein EOF-Zeichen oder etwas Ähnliches erreicht.

Es muss nicht nach einem EOF gesucht werden, da es sich rekursiv nur für Knoten aufruft, die untergeordnete (0-Bits) haben. Sobald der Algorithmus alle Blätter erreicht hat, gibt es kein rekursives Aufrufen mehr, so dass der Leser genau an der richtigen Stelle positioniert ist, um mit dem Lesen des Inhalts zu beginnen (direkt nach dem Lesen des gesamten Headers, ohne zusätzliches "Ende-des-Kopfes") Angaben

Verwandte Themen