Я пытаюсь реализовать сжатие файлов с использованием кодировки Хаффмана. В настоящее время я пишу заголовок в качестве первой строки сжатого файла и затем записываю закодированные двоичные строки (т. Е. Строки, имеющие двоичное кодированное значение).Запись двоичного значения в файл для кодировки Huffman
Однако, вместо уменьшения размера файла, размер моего файла увеличивается, как для каждого символа типа '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
Есть ли код вызова для этого? Как вы заселяете myTree? –
Да, есть связанный список, в котором есть символы и их значения, а «контент» получает правильное двоичное значение для этой конкретной строки. Моя единственная проблема - это место здесь, поэтому мне нужно записать в файл так, чтобы он занимал меньше места, чем то, что он делает сейчас, так как мой текущий сжатый файл заканчивается размером 4-5 раз от оригинала – JGPhilip
. Таким образом, вы можете проверить или войти в систему, чтобы проверить, что myTree имеет уникальные члены ... например «a» не повторяется. –