Если ваш единственный файл представляет собой конкатенацию нескольких файлов gzip, то вы можете найти верхнюю границу количества файлов.Формат Gzip начинается с волшебства 0x1f8b
.
Подсчитайте возникновение магии в одном файле.Количество указывает, что у вас есть не более, чем столько файлов.К сожалению, это верхняя граница, а не точное количество файлов.Потому что 0x1f8b
может также появиться в разделе данных случайно 1 из 64K байтов.Чтобы уменьшить количество ложных совпадений до 1 на ~ 24 миллионов байт, вместо этого можно сканировать 0x1f8b08
.Трейлинг 0x08
- это поле «метод сжатия», которое всегда равно 8.
Возможны дальнейшие уточнения этого «фильтра».См. Поле FLG в RFC1952.
Если элементы одного файла имеют формат не gzip, а формат Zlib или raw, то вам не повезло;Вы должны распаковать, чтобы посчитать количество файлов - что бы я ни делал.