Я пытаюсь реализовать сжатие файлов с использованием кодировки Хаффмана. В настоящее время я пишу заголовок как первую строку сжатого файла, а затем пишу закодированные двоичные строки (т.е. строки, имеющие двоичное закодированное значение).
Однако вместо уменьшения размера файла размер моего файла увеличивается, так как для каждого символа, такого как «a», я пишу соответствующий двоичный файл, например 01010001, который занимает больше места.
Как я могу записать его в файл таким образом, чтобы он уменьшил пространство?
это мой код
public void write( String aWord ) {
counter++;
String content;
byte[] contentInBytes;
//Write header before writing file contents
if ( counter == 1 )
{
//content gets the header in String format from the tree
content = myTree.myHeader;
contentInBytes = content.getBytes();
try {
fileOutputStream.write(contentInBytes);
fileOutputStream.write(System.getProperty("line.separator").getBytes());
} catch (IOException e) {
System.err.println(e);
}
}
//content gets the encoded binary in String format from the tree
content = myTree.writeMe(aWord);
contentInBytes = content.getBytes();
try {
fileOutputStream.write(contentInBytes);
fileOutputStream.write(System.getProperty("line.separator").getBytes());
} catch (IOException e) {
System.err.println(e);
}
}
Пример входного файла:
abc
aef
aeg
Сжатый файл:
{'g':"010",'f':"011",'c':"000",'b':"001",'e':"10",'a':"11"}
11001000
1110011
1110010