2016-06-28 11 views
-2

Я создаю базовый инструмент кодирования/декодирования Хаффмана. Я нашел this вопрос, который помог мне реализовать заголовок, который хранит мое сгенерированное дерево huffman в двоичной форме. Я также могу использовать дерево для кодирования/декодирования текста в двоичном файле. Таким образом, программа действительно работает, но у меня все еще есть проблема.Дифференцирование двоичного заголовка и кодированного двоичного кода в Huffman

В настоящее время заголовок и закодированные двоичные файлы находятся в отдельных файлах, потому что я не могу найти способ помещать их в один и тот же файл, что упрощает чтение заголовка в начале процедуры декодирования. Жесткое кодирование в некотором «конце заголовка» похоже на довольно хакерский способ сделать это, не говоря уже о том, что существует вероятность того, что некоторые начальные биты завершающего символа могут быть прочитаны как часть закодированного дерева в заголовке , в результате чего все дерево будет повреждено.

Хотя моя программа работает с отдельными файлами заголовка и тела, я хотел бы объединить их. Любые идеи о том, как я могу это сделать?

ответ

1

Вам не нужно ничего делать, чтобы объединить ваш заголовок (дерево) и контент (текст, закодированный Хаффманом).

Если вы смотрите в ответе на вопрос, который вы в курсе, here и изучить алгоритм декодирования (псевдо-код функции ReadNode(BitReader reader) есть), вы можете увидеть, что алгоритм прекращает чтение дерева только потому, что он читает все это - не потому, что он достигает символа EOF или чего-то подобного.

Не нужно искать EOF, потому что он рекурсивно вызывает себя только для узлов, у которых есть дети (0 бит). Как только алгоритм достигнет всех листов, рекурсивного вызова больше нет, поэтому читатель будет расположен точно в нужном месте, чтобы начать чтение содержимого (сразу после прочтения всего заголовка без дополнительного «конца заголовка») Показатели