Как сохранить файл в битах с помощью java?

прямо сейчас я работаю над проектом по сжатию текста с использованием кодирования Хаффмана. Я могу прочитать файл (содержащий текст ASCII) и создать сообщение, закодированное Хаффманом. Например, если мой файл "input.txt" содержит следующий текст: Missippi river, то мое закодированное кодовое слово будет чем-то вроде этого 1110100110111001001010000110101111001110, которое имеет 40 бит, тогда как мое "input.txt" было 14 байтов (14 * 8 = 112 бит). Итак, я сократил 112 бит до 40 бит, но как мне вывести кодовое слово (содержащее О и 1) в файл длиной всего 40 бит? Я попытался поместить эту строку в файл .txt., но этот файл .txt. оказался даже длиннее моего "input.txt", что сделало весь мой проект бесполезным. Я пытаюсь создать модель кодировщика/декодера. Я успешно создал часть кодировщика, и я также могу создать кодовое слово Хаффмана, но как мне вывести его, чтобы мой декодер мог его прочитать и распаковать.

Спасибо


person theprogrammer    schedule 22.04.2016    source источник
comment
Зачем хранить биты в виде строки?   -  person m0skit0    schedule 23.04.2016
comment
Я взял его с дерева, так что использовать веревку было несложно. Позже я использовал BitSet, чтобы преобразовать его в int.   -  person theprogrammer    schedule 23.04.2016


Ответы (1)


вместо строки из 0 и 1 вы можете использовать java BitSet для хранения 1/0 в виде логических битов, а затем, когда вы его записываете, вы должны использовать toByteArray для записи байтов непосредственно в виде двоичного файла вместо записи строки текста.

person John Gardner    schedule 23.04.2016
comment
На самом деле я использовал BitSet и сериализовал объект BitSet, который оказался больше, чем мой фактический ввод. Будет ли toByteArray таким же? - person theprogrammer; 23.04.2016
comment
@ rohitkrishna094 rohitkrishna094 Нет, сериализация предназначена для несколько иной цели (хранение данных таким образом, чтобы их можно было автоматически вернуть обратно в объект). Если вы записываете байты напрямую, это будет намного эффективнее (поскольку хранятся просто байты, а не внутренние параметры/состояние BitSet) - person nanofarad; 23.04.2016
comment
Ох, хорошо. Спасибо, но не могли бы вы дать мне ссылку или небольшой фрагмент кода, который объясняет, как работает массив байтов. - person theprogrammer; 23.04.2016
comment
Основная идея состоит в том, что набор битов также является набором 1010101010101, но хранится в объекте, который упрощает программирование. но когда вы превращаете это в байты, вы упаковываете 8 бит в каждый байт. поэтому каждые 8 ​​единиц или нулей (16 байтов строки в java?) превратятся всего в 1 байт при сериализации в виде массива байтов. - person John Gardner; 28.04.2016