Я работал над программой сжатия и декомпрессии Хаффмана. На этом этапе моя программа сжатия работает просто отлично, но я не могу заставить код распаковки воспроизвести исходный файл, который уже был сжат. Я думаю, что я делаю что-то не так. Полный код ниже. Пожалуйста, любая помощь будет оценена.
Я пишу в заголовке моего сжатого файла: моя хэш-карта частоты для перестройки дерева, дерево перестраивается, но теперь некоторые байты data[i]
имеют нулевой путь (префикс)Почему это так и как я могу заставить его работать?
codePrefixMap читается из сжатого файла
byte[] data = (byte[]) ois.readObject();
for (int i = 0; i < data.length; i++) {
String prefix = codePrefixMap.get(data[i]);
if (prefix == null) {
// prefix is sometimes null (i don't know why)
continue;
}
// Commence a traverser a partir la racine root
Node temp = root;
int y = 0;
while (temp.getLeft() != null) {
if (prefix.charAt(y) == '0') {
temp = temp.getLeft();
} else {
temp = temp.getRight();
}
y += 1;
}
byte code = temp.getValue();
dos.write(code);
// System.out.println((char) code);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}