← All posts tagged bzip2

OCTAGRAM

Провёл эксперимент и обнаружил, что два склеенных bzip2 файла распаковываются в один, склеенный из двух оригинальных. И это же замечательно!

Это может пригодиться для генерации на веб-сервере списков файлов p2p для любой поддиректории:
Открываем новый файл на запись, начинаем туда в сжатом виде писать XML списка файлов, перед каждым открывающим тегом Directory и после каждого закрывающего делаем BZ_FINISH, а смещения запоминаем на будущее. Пролог и эпилог с директивой XML и тегом FileListing тоже нужно сделать возможным отрезать.
Потом, когда веб-серверу нужно отдать список файлов для поддиректории, он, не особенно напрягаясь, склеивает пролог, XML-описание поддиректории и эпилог. А ещё потом можно редактировать этот файл. Придётся байтики подвигать, но хотя бы пережимать не нужно.
Я нагенерил обычных отдельных списков файлов для каждой поддиректории своей шары, и у меня в общем получилось 23 мегабайта. Обычный сжатый (с аргументами blockSize100k => 9, workFactor => 30) полный список файлов весит 3,1 мегабайта. Несжатый — 12,5.
Реализовал эту идею. Сжатый список файлов с разрывами получился на 4,8 мегабайт. Выкручивание workFactor на 250 практически ничего не изменило, но всё равно неплохо.

Гипотетически можно с zlib устроить аналогичное, чтоб посетители с плохим Интернетом могли экономить трафик, но и веб-сервер не напрягался. Разрезать шаблон на куски, сжать каждый, на лету дожать остальное содержимое и отдавать всё в склеенном виде.