Такое поведение ожидается.
Завышенные данные представляют собой поток кодов с переменной длиной битов, соединенных вместе в поток байтов. Отдельные единицы кода не выровнены по байту, и сжатый поток обычно не заканчивается на границе байта. Таким образом, последний байт сжатого потока может содержать несколько неиспользуемых битов.
Сжатый поток не сохраняет свою длину. Вместо этого одна из единиц кода используется в качестве индикатора окончания потока. Сами кодовые блоки по сути являются кодами Хаффмана, поэтому самые распространенные из них самые короткие. Индикатор конца потока появляется только один раз в потоке, поэтому его код, вероятно, будет больше 8 бит.
Таким образом, гарантируется, что последний байт в сжатом потоке содержит только конец конца. индикатор потока, и весьма вероятно, что индикатор конца потока также занимал весь второй-последний байт, а также несколько битов третьего-последнего байта. (Я почти уверен, что длина кода ограничена 16 битами, но я не проверял справочные материалы.)
Каждой единице кода соответствует один или несколько байтов в исходном сообщении, и эти байты может быть восстановлен без обращения к следующей единице кода. Если вы распаковываете до кодовой единицы, которая предшествует концу потока, вы распаковываете весь файл; единственное, что говорит вам индикатор конца потока, это то, что вы закончили.