Здравствуй, лор. Из айтишных форумов я посещаю только тебя, поэтому спросить мне больше негде.
Пытаюсь закодить LZW. Как работает сам алгоритм, понял хорошо. Возникают проблемы с его реализацией. Сразу оговорюсь, что в качестве яп — java.
Ограничим размер самого длинного кода в словаре 12-ю битами. Допустим, я считал какой-то блок данных (используя жабий FileInputStream), корректно обработал его и получил для него список кодов (пусть он хранится в ArrayList). Теперь передо мной стоит задача: как сохранить этот набор кодов (в файл) так, чтобы можно было бы потом корректно его считать. Т.е. если все коды имеют переменную длину, то как при декодировании один код отличить от другого в непрерывном потоке байт?
UPD: вот тут - LZW.jar, BinaryStdOut.jar делается по-наивному. Как я понял, все коды просто приводятся к длине в 12 бит, поэтому проблем при декодировании не возникнет. Но это неоптимально по сжатию.