Я пытаюсь реализовать сжатие Huffman Tree. Практически все, что работает, - это предоставление <8-битных кодов наиболее распространенным символам в текстовых документах, а больших кодов - менее распространенным символам. Затем есть закодированное двоичное дерево, которое позволяет вам перемещаться вниз: 1 указывает на то, что нужно идти влево, а 0 указывает на то, что нужно идти вправо, что приводит вас к символам. </p>
Так что, очевидно, есть куски длиной не 8 байт. Я округлял их по мере необходимости с нулями в конце и преобразовывал их в символы. Однако я только что обнаружил, что Java пишет по 3 байта на символы. Поскольку речь идет о сжатии, я, очевидно, хочу один байт.
Проблема в том, что я не знаю, какие байты в итоге будут пытаться быть записанными. Три разных <8-битных кода могут быть объединены. Мне нужно иметь возможность писать любой код в текстовый файл. Однако существуют недопустимые последовательности байтов, и поэтому весь мой подход полностью сглажен. </p>
Есть ли способ, которым я могу позволить любой последовательности байтов быть действительной в определенном разделе файла и просто сохранить ее такой, какой она есть в буквальном смысле, и не беспокоиться о том, что символ преждевременно завершает файл или причиняет другое зло? Я пишу код на Mac, так что это проблема, в отличие от окон, в которых длина файла просто равна длине файла, поэтому им не нужен символ конца файла.
Если здесь нет прямого решения, то, возможно, я мог бы создать свою собственную кодировку, которая не будет выходить из файла, и вложить ее в более распространенную?