ачо reflate круче precomp'a?
вроде одно и тоже делают
реквестирую cls для фриарка
Нет, не одно и то же, с технической точки зрения. И нет, reflate не круче precomp-а.
Precomp сканирует входные данные на предмет наличия в них заголовка сжатого deflate потока. Как только такой заголовок найден, Precomp пытается расжать его и делает он это, исходя из предположения, что это "правильный" поток, не выходящий за рамки deflate спецификации. Если поток удалось расжать, то precomp начинает "драчить" этот поток, перебирая комбинации уровня сжатия zlib и уровни памяти. А таких комбинаций может быть 81 штука.
Если повезло и некая комбинация дала сжатый поток идентичный тому, что был найден, то расжатый поток пишется в pcf файл и precomp переходит к следующему.
Reflate тоже сканирует данные и ищет сжатые потоки, и пытается их расжать. Но на основе собственной реализации deflate, которая учитывает некоторые нестандартные реализации сжатия.
Это и хорошо и плохо. Хорошо тем, что некоторые потоки, которые не расжались precomp-ом, расжимаются через Reflate. Плохо тем, что подобная реализация, для успешного восстановления сжатого потока, использует трюк.
Когда reflate расжал поток, то он в отличии от precomp, ничего не "дрочит". Он не знает с каким уровнем сжатия\памяти был сделан поток и ему на это даже наплевать. Для успешного воссоздания оригинального сжатого потока, reflate использует файлы коррекции, которые позволяют получить идентичность. Вы сами можете увидеть эти файлы в папке, где находятся расжатые потоки. Это файлы с расширением
hif. Именно поэтому reflate гораздо медленнее Precomp и именно поэтому reflate менее эффективен чем precomp на тех данных, где precomp видит и обрабатывает сжатые потоки.
А теперь самое неприятное.
Мало того, что reflate медленный, так он еще и глючный.
1. Нет поддержки больших файлов.
Вы можете не заметить этого, так как в некоторых версиях, при достижении некого порога, reflate просто начнет либо перезаписывать текущие unp файлы, либо создавать новые с адресами, которые перехлестнут другие данные. Сколько осилит reflate на ваших данных - предсказать невозможно.
Так что если кто планирует заюзать reflate на 60 ГБ данных - не тратьте свое время.
2. reflate может встать колом на ровном месте или крэшнуться, или вызвать ошибку распаковки.
В результате долгих тестов выяснилось, что на некоторых потоках, reflate теряет несколько байт и создает сжатый поток, который короче оригинального, либо просто крэшится.
Можете попробывать взять прикрепленный файл, извлечь из него reflate_error.dat и попробывать сжать.
3. В reflate нет рекурсии.
Так что на данном этапе, Reflate - это эксперимент, непригодный для использования.