Russian Qt Forum
Ноябрь 25, 2024, 02:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: ZIP для домохозяек  (Прочитано 4950 раз)
Majestio
Гость
« : Ноябрь 21, 2013, 14:26 »

Не так давно я написал архиватор ZIP на PHP (нужда возникла чисто из за ограничений бесплатного хостинга - по памяти, выделяемой процессу, и по макс. размеру файла на хостинге). Сама реализация получилась так, что и самому понравилась - сделал ее так сказать адаптивной.

Алгоритм следующий:

1) (опционально) Если файл имеет расширение слабо пакуемых или непакуемых файлов, типа -
'7z','a00','a01','a02','ace','ain','alz','apz','ar','arc','arh','ari','arj','ark','axx','b64','ba','bh','bhx','boo','bz','bz2','bza','bzip','bzip2','c00','c01','c02',
'cab','car','cb7','cbr','cbz','cp9','cpt','dd','deb','dgc','dist','djvu','dl_','dz','ecs','efw','epi','ex_','f','fdp','gca','gif','gz','gza','gzi','gzip','ha','hbc','hbc2',
'hbe','hki','hki1','hki2','hki3','hpk','hyp','ice','ipg','ipk','ish','ita','j','jar.pac','jgz','jic','jpeg','jpg','kgb','lbr','lemon','lha','lnx','lqr','lz','lzh','lzma','lzo',
'lzx','md','mou','mzp','oar','oz','p7m','pack.gz','package','pae','pak','paq6','paq7','paq8','par','par2','pbi','pcv','pea','pet','pf','pim','pit','piz','pkg','png','pup',
'pup','puz','qda','r0','r00','r01','r02','r03','r1','r2','r21','r30','rar','rev','rk','rnc','rp9','rpm','rte','rzs','s00','s01','s02','sar','sdn','sea','sen','sfs','sfx',
'sh','shar','shr','sit','sitx','spt','sqx','sqz','tar','tar.gz','tar.xz','taz','tbz','tbz2','tg','tgz','tlz','tlzma','tsk','txz','tz','uc2','uha','vem','vsi','wad','war',
'wot','xef','xez','xmcdz','xpi','xx','xz','y','z','z01','z02','z03','z04','z05','z06','z07','z08','z09','zap','zi','zip','zipx','zix','zl','zoo','zpi','zz'
выбирается метод STORE
2) Иначе файл сперва жмется методом DEFLATE, потом BZIP2
3) В результирующий архив попадают сжатые данные у которых размер получается меньше
4) Алгоритму можно задавать предельные размеры использования памяти и размеры томов результирующего архива

Хочу это переписать под Qt.

Плюс этого всего - архивы получаются ощутимо меньше, нежели я использую обычный пакер, т.к. там есть возможность только жестко выбирать метод сжатия. Но есть одно "но" ...

Мои ZIP-ы нормально читает только 7z. WinRAR, открывая архивы со смешанными методами сжатия файлов - на файлы сжатые по BZIP2 кричит "неизвестный метод сжатия". Почитав стандарт, я вроде не нашел запрета на BZIP2 в явном виде.

Вот и не решаюсь тратить время - если это все же в пределах стандарта, тогда смысл есть.
А если всеж нарушение и это новодел - думаю забросить это.

Какие мысли есть по этому поводу?
Интересно все.
Записан
Bepec
Гость
« Ответ #1 : Ноябрь 21, 2013, 14:31 »

Сравнение приведите с zip'ом с максимальным сжатием.
Записан
Majestio
Гость
« Ответ #2 : Ноябрь 21, 2013, 14:49 »

Сравнение приведите с zip'ом с максимальным сжатием.

Сейчас не приведу - когда писал для бэкапа сайта, мой пакер выигрывал у 7z (в режиме ZIP), с максимальным сжатием - примерно 2-7%, но и 2-5% проигрывал ему же в режиме 7z (метод PPMD). В точных цифрах могу ошибаться - ориентировочно пишу, запомнились разбежки в районе 5% в среднем. Данные были - картинки, текст (html, php), архивы, исполняемые файлы, звуковые в формате ogg. Зависимость такая - чем больше непакуемых или слабопакуемых данных, тем больше 7z-ZIP пухнет.
Записан
Majestio
Гость
« Ответ #3 : Ноябрь 21, 2013, 19:40 »

Вот еще думаю, можно попробовать запилить DEFLATE64, еще процент-другой "отвоевать" ...
Записан
Bepec
Гость
« Ответ #4 : Ноябрь 21, 2013, 20:11 »

А стоит овчинка выделки? К примеру гиг плохо пакуемых данных зазиповать и эмм.. задомохозяйничать. Результаты по времени и размерам сравнить бы.

PS ради 2-3% даже шевелиться не особо хочется Веселый
Записан
Majestio
Гость
« Ответ #5 : Ноябрь 21, 2013, 20:31 »

Лан, оставлю пока в виде TODO. Пока стоял вопрос только распаковки - штатные средства тянут. Ну а там посмотрим. Пока Qt-шными средствами гигабайты не жал, на счет расхода памяти ниче не скажу.
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #6 : Ноябрь 22, 2013, 11:57 »

Majestio , может тебе будет интересно глянуть на FreeArc.
Он тоже анализирует содержимое и применяет разные алгоритмы компрессии для разных данных.
Записан
Majestio
Гость
« Ответ #7 : Ноябрь 22, 2013, 12:09 »

Majestio , может тебе будет интересно глянуть на FreeArc.
Он тоже анализирует содержимое и применяет разные алгоритмы компрессии для разных данных.

Идея хорошая! Но чего-то исходников не вижу. А вообще суть моего поста - создание не очередного пакера, а библиотеки под Qt, чтобы не заморачиваться с архивами. По поводу реализации, в принципе так и думал, вполне можно реализовать методы сжатия, как плагины, ну и пару процедур по разборке контейнеров, а-ля ZIP, 7z.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #8 : Ноябрь 22, 2013, 14:13 »

Цитировать
Но чего-то исходников не вижу.
Ты их не видишь, но они есть Улыбающийся
http://freearc.org/ru/Download.aspx
Записан

Majestio
Гость
« Ответ #9 : Ноябрь 22, 2013, 14:20 »

Цитировать
Но чего-то исходников не вижу.
Ты их не видишь, но они есть Улыбающийся
http://freearc.org/ru/Download.aspx

Сенкс - был невнимателен! Супер, это еще более может облегчить дело! Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 22.