2016-04-22 11 views
0

gerade arbeite ich an einem Projekt zur Textkompression mit Huffman-Codierung. Ich kann eine Datei (mit ASCII-Text) einlesen und eine Huffman-codierte Nachricht erstellen. Zum Beispiel, wenn meine Datei "input.txt" den folgenden Text enthält: Missippi river, dann wäre mein codiertes Codewort etwas wie dieses 1110100110111001001010000110101111001110 welches 40 Bits hat, während mein "input.txt" 14 Bytes (14 * 8 = 112 Bits) war. Also habe ich 112 Bits auf 40 Bits reduziert, aber wie gebe ich mein Codewort (das O und 1 enthält) in eine Datei aus, die nur 40 Bits lang ist? Ich habe versucht, diese Zeichenfolge in eine .txt. Datei zu setzen, aber diese .txt. Datei endete sogar noch länger als meine "input.txt", wodurch mein gesamtes Projekt wertlos gemacht wurde. Ich versuche ein Encoder/Decoder-Modell zu erstellen. Ich habe erfolgreich den Codiererteil erstellt, und ich kann auch das Huffman-Codewort erstellen, aber wie gebe ich das aus, damit mein Decoder es lesen und dekomprimieren kann.Wie speichert man eine Datei in Bits mit Java?

Dank

+0

Warum würden Sie Bits als String speichern? – m0skit0

+0

Ich habe es von einem Baum bekommen, daher schien es einfach, eine Saite zu benutzen. Später habe ich ein BitSet verwendet, um es in int umzuwandeln. – theprogrammer094

Antwort

2

statt einer Reihe von 0 und 1 ist, könnten Sie eine java BitSet verwenden, um die 1/0-en als boolean Bits zu speichern, und dann, wenn Sie es schreiben, würden Sie toByteArray verwenden, um die Bytes direkt zu schreiben als binäre Datei, anstatt eine Textzeichenfolge zu schreiben.

+0

Ich benutzte tatsächlich ein BitSet und ich serialisierte BitSet-Objekt, das am Ende größer als meine tatsächliche Eingabe wurde. Wäre der 'toByteArray' gleich? – theprogrammer094

+0

@ rohitkrishna094 Nein, die Serialisierung wurde für einen etwas anderen Zweck entwickelt (Daten werden so gespeichert, dass sie automatisch in ein Objekt zurückversetzt werden können). Wenn Sie Bytes direkt schreiben, wird es viel effizienter (da einfach Bytes gespeichert werden, und nicht die internen Parameter/Status von BitSet) – hexafraction

+0

Oh ok. Danke, aber könnten Sie mir einen Link oder ein kleines Code-Snippet geben, das erklärt, wie das Byte-Array funktioniert. – theprogrammer094

Verwandte Themen