Я пытаюсь прочитать содержимое файла, а затем записать его в другой файл с кодировкой Хаффмана. Поэтому я создал дерево Хаффмана, в котором каждый узел содержит символ, частоту символа и двоичную строку, представляющую частоту. Что мне трудно понять, так это запись кодированных символов Хаффмана в файл.
Я попытался записать двоичную строку в файл, но понял, что это просто запись строки, а не закодированные данные. Поэтому я затем преобразовал двоичные строки в байты и записал байты в файл, но это просто дало бы мне пустой файл того же размера, что и оригинал. Я чувствую, что что-то упускаю, когда дело доходит до написания файла.
Редактировать: оглянувшись на мой код, я понял, что мое дерево не совсем корректно, и теперь я могу (я думаю) объединить битовую строку, чтобы создать байтовый массив, который я могу записать в файл (Код обновлен, чтобы отразить это). Для моего тестового случая я читаю в тексте AAA_BB_C
, но когда я смотрю на файл, получается <0x1e>
. Я не уверен, что это значит. Я ожидал такого же вывода исходного файла, только меньшего размера.
public static void writeFile(HuffTree tree) {
String bin = ""; // String of entire binary code
int spot = 0; // Spot in array
byte[] bytes = new byte[256]; // byte array
try {
FloatileWriter writer = new FileWriter("test(encoded).txt");
// Gets Binary String of each Character in the file
for(int i = 0; i < fileText.length(); i++) {
bin += tree.findDataBinary(fileText.charAt(i));
}
// Takes each bit and adds to byte array
System.out.println(bin);
while(bin.length() > 7) {
String temp = bin.substring(0, 7);
bin = bin.substring(7, bin.length());
bytes[spot] = Byte.parseByte(temp, 2);
spot++;
}
// Writes bytes to file
for(int i = 0; i <= spot; i++) {
writer.write(bytes[i]);
}
writer.close();
} catch(IOException e) {
System.out.println("IOException!");
}
}