В LZW словарь не сохраняется со сжатым файлом. (Или словарь - это файл, в зависимости от вашей перспективы.) Каждое значение, записываемое в файл, имеет предопределенную битовую ширину в соответствии с его местоположением. Например, он может начинаться как пары 9-битных индексов словаря, за которыми следуют 8-битные данные, до тех пор, пока индексы не будут исчерпаны (что происходит в точном месте), когда он переключается на 10-битные индексы.
Детали зависели от того, как вы реализуете сжатие. Некоторые делают постоянные 12-битные индексы. Но ни в коем случае не требуются дополнительные разделители.
Кроме того, поскольку данные не выровнены по 8-битным границам, невозможно определить разделители, если вы еще не правильно читаете данные!
Edit:
Если вы надеетесь, что алгоритм сжатия LZW действительно сгенерирует меньшие данные, чем входные данные, то вам следует сделать несколько вещей.
Во-первых, вы должны записать файл как двоичный файл, а не как текст. Запись в виде текста будет расширять, а не сокращать размер файла. Значение 127 может храниться в одном байте в двоичном виде (01111111), но для него требуется четыре байта UTF-8 с пробелом-разделителем («127» = 00110001 00110010 00110111 00100000).
Во-вторых, LZW предназначен для работы со значениями кода, которые больше, чем один байт, но меньше, чем два байта, поэтому для правильной выдачи данных вы должны выполнить некоторую перестановку битов. Одного байта достаточно только для кодирования первых 256 неявно определенных записей таблицы. Еще один бит даст вам еще 256 записей для работы, но записи в 9-битной индексированной таблице быстро исчерпываются. С 12 битами вы можете получить 4096 записей таблицы, что является разумным размером таблицы. Если бы вы использовали два полных байта, то у вас была бы довольно большая таблица с 65 тыс. Записей. Проблема в том, что если вы не используете всю емкость своего табличного пространства, вы теряете биты. Вывод будет содержать много битов, которые всегда равны нулю, и это будет очень плохо для ваших коэффициентов сжатия.
В-третьих, потоковый кодер / декодер не может принимать отдельные значения за раз, потому что закодированные данные перекрывают границы байтов. Если используется постоянный размер 12-битного кода, то одновременно может быть обработано несколько кратных двух кодированных значений. Но в целом алгоритм предназначен для работы с полными файлами.