пятница, 20 ноября 2009 г.

Сжатие информации

И опять я буду рассказывать про файловый поток, потому что сжатие будет осуществляться именно с ним.

Алгоритмы сжатия существуют разные, один из самых известных - ZIP. В HiAsm есть компонент для сжатия по алгоритму ZIP, но отдельно можно скачать компоненты для сжатия по алгоритмам LZH и LZMA. Не забудьте rar0 переименовать в rar.

В архивах вы найдёте файлы pas, ico, ini. Можете почитать статью про устройство HiAsm, но компоненты можно установить из без неё. Распакуйте архив в отдельную папку, запустите HiAsm и сбросьте ini-файл в окно HiAsm. В открывшемся окне выберите пакет Delphi и вкладку, на которую хотите установить компонент. Вы также можете вписать имя новой вкладки, и тогда она будет создана. После этого откройте вкладку и найдите в её конце новый компонент. Чтобы его передвинуть выше, нажмите на нём правой кнопкой и выберите "переместить вверх".

Ну а теперь потренируемся сжимать информацию. Для этого нужен файловый поток, про него я рассказывал.



Вот схема zip-сжатия файла. Сначала вы выбираете файл для сжатия и файл, куда сохранять сжатые данные. Затем происходит открытие файла, выдача файлового потока на onLoad и сжатие его компонентом ZLIB (вкладка "Файлы"). Следует отметить, что компоненту требуется библиотека ZLIB.dll, которая находится в папке Plug. Не забывайте класть её в папку с программой, если собрались выкладывать в Интернет.

У второго FileStream используется точка doCopyFromStream, которая записывает весь файловый поток в файл, однако ни открытия, ни закрытия файла здесь нет. Дело в том, что параметр AutoCopy у FileStream установлен в true, то есть метод doCopyFromStream сам будет открывать и закрывать файл. Здесь это очень удобно.

Распаковка не отличается от упаковки, поэтому я даже схему приводить не буду: надо у компонента ZLIB лишь использовать точку doDeCompress, а целом - всё то же самое.

Сжатия по другим алгоритмам происходят так же, но остальные два компонента немного сложнее, поэтому их нужно рассмотреть подробнее.

У компонента LZHComp точки для сжатия и распаковки файлового потока спрятаны на вкладке "Точки", а по умолчанию видны точки для сжатия файла с сохранением в новый файл. Если у вас такая простая цель, то можно использовать и их, но в более сложных случаях придётся всё-таки выводить точки для упаковки файлового потока. Помните, что упакованный/распакованный поток выдаётся на точку onStreamResult, а не на onResult.

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



Обратите внимание на параметр компонента ProgressInterval - он определяет, через сколько миллисекунд будет выдаваться информация о текущем кодируемом байте. По умолчанию - 50 мсек, этого достаточно. Перед началом сжатия происходит установка максимального значения полосы прогресса, а затем каждые 50 мсек - установка значения текущего сжимаемого байта.
В схеме используется компонент Application. Благодаря вызову его метода программа не зависнет при долгом выполнении сжатия, она всё равно будет отображать прогресс.
Пока это происходит, третье событие разветвителя ожидает и не происходит. Но как только сжатие завершится, третье событие мигом оповестит нас о степени сжатия, получив нужную информацию из компонента.
А четвёртое событие закроет файл.

Стоит отметить, что алгоритмы сжатия можно использовать совместо и чередовать. Например, так:



Но тогда распаковку нужно проводить в обратном порядке:



Однако совместное использование не всегда означет лучшую степень сжатия, поэтому вы можете самостоятельно пробовать разные комбинации и сравнивать степени сжатия.

В следующем посте я расскажу про шифрование информации с паролем.






Чтобы жить спокойно, установите скрытое видеонаблюдение. Можно запрограммировать систему на реакцию при происхождении подозрительных событий.

Если ваша дверь всё ещё без таблички, а гардероб - без номерков, то пора сделать изготовление табличек. Металлические таблички, с гравировкой.

Для хорошего дома нужны хорошие лестницы. Как вариант - винтовые лестницы для дома. Компания "Баг-плюс" спроектирует и изготовит лестницы из разных материалов разных конструкций.

Комментариев нет:

Отправить комментарий