Binary File Output

  • Themenstarter Themenstarter huffman5431
  • Beginndatum Beginndatum
H

huffman5431

Gast
Habe mal die Huffman Kodierung implementiert und will jetzt den Text den ich vorher kodiert habe, in einer Datei speichern.
Bei all meinen Versuchen bisher war die kodierte Datei wesentlich größer als die ursprünglich txt datei und das ist ja nicht Sinn der Sache bei der Datenkompression 😀
Kann mir jemand sagen was ich genau machen muss um etwas in binärer Form mit Java zu speichern ohne, dass es dann wieder als ascii oder sonst was interpretiert wird?
Als Bestriebssystem benutze ich übrigens Kubuntu, falls das einen Unterschied macht.
 
Java:
FileOutputStream fos = new FileOutputStream(filename);
DataOutputStream dos = new DataOutputStream(fos);
out.writeByte(12);
out.close();
Irgendwie so in der Art. Wie versuchst du es denn bis jetzt?
 
genau so hab ich es bisher probiert 😀
aber es stellte sich raus, egal welche Dateiendung ich nehme,
die Datei ist immer um ein vielfaches größer als das Original.
 
Ich will ja nicht etwas als zip oder gzip packen damit die datei kleiner wird,
ich will eine Binärdatei erstellen, in die ich '0' oder '1' rein schreiben kann.
 
Stimmt, aber wenn ich bytes in eine txt datei schreibe wird nicht 1 Bit für 0 oder eins verwendet, sondern jede Ziffer besteht aus 7 Bit ( nach ascii ). Und damit ist die "komprimierte" Datei wesentlich größer als der Text.
 
jede Ziffer besteht aus 7 Bit
???:L
Wie schreibst Du denn die Daten raus?
Wenn ich mit folgendem Code in eine Datei schreibe:
Java:
try {
	File file = new File("C:/test.txt");
	FileOutputStream out = new FileOutputStream(file);
	byte[] b = new byte[1];
	b[0] |= 1;
	out.write(b);
	out.close();
} catch (Exception e) {
	e.printStackTrace();
}
steht genau ein Byte in der Datei: 00000001
 
Im Grunde sollte die Aussage (glaube ich) heißen: wenn man "01010111" als Text hinschreibt verbraucht es mehr Platz als wenn man es als Byte hinschreibt.
 
"steht genau ein Byte in der Datei: 00000001"

genau das ist ja das Problem 😀
ich möchte, dass 0 oder 1 nur 1Bit an Speicherplatz belegt, statt 1 Byte
 
Naja wie schon mal erwähnt ist die kleinste Einheit, die man in eine Datei schreiben kann ein Byte
Du musst einfach nur 8 Bit zusammenfassen, bevor Du sie als Byte rausschreibst.
 
Hey Danke !
Jetzt scheint es zu funktionieren.
Es werden keine 0 und 1 mehr im normalen texteditor angezeigt.
Die "kodierte" datei ist aber immernoch wesentlich größer...
ich werde nochmal nachprüfen ob ich ein Fehler bei der Implementierung der Huffman Kodierung gemacht habe,
das sollte aber eigt nicht der Fall sein.
 
Habe den Fehler gefunden, lag am Programmcode,
mit der von Michael beschriebenen Methode klappt es jetzt wunderbar,
nochmals Danke !
 
"steht genau ein Byte in der Datei: 00000001"

genau das ist ja das Problem 😀
ich möchte, dass 0 oder 1 nur 1Bit an Speicherplatz belegt, statt 1 Byte

Servus

Ist das denn überhaupt möglich ? Ich dachte das man in einem "int" nur 1 Byte spiechern kann also 8 Bit ? Gibt es Speichermöglichkeiten wo nur ein Bit gespeichert werden kann ? ???:L


lg
S6
 

Neue Themen


Zurück
Oben