Сложный способ решить эту проблему - распаковать дважды в буфер большого размера.
В обоих случаях вам нужен «случайный шаблон».Начиная с конца, вы подсчитываете количество байтов, которые соответствуют шаблону, и обнаруживаете конец распакованной последовательности, где он отличается.
Или это так?Возможно, случайно один из последних байтов распакованной последовательности соответствует случайному байту в этой точной позиции.Таким образом, окончательный распакованный размер может быть больше, чем обнаруженный.Если ваш шаблон действительно случайный, он не должен превышать нескольких байтов.
Вам необходимо снова заполнить буфер случайным шаблоном, но другим.Убедитесь, что в каждой позиции новый случайный шаблон имеет значение, отличное от старого случайного шаблона .Для более быстрой скорости вы не обязаны заполнять полный буфер: вы можете ограничить новый шаблон несколькими байтами до и еще несколькими байтами после первого обнаруженного конца.32 байта должно быть достаточно, поскольку маловероятно, чтобы такое количество байтов случайно соответствовало первому сгенерированному случайному шаблону.
Распакуйте во второй раз.Определите снова, где образец отличается.Возьмите большее из двух значений между первым и вторым концом обнаружения.Это ваш распакованный размер.