Вверх ↑
Пакеты 
HiAsm4
Windows 
Компоненты 
Фaйлы 
Потоки - LZMA

LZMA
Краткое описание
Компонент предназначен для сжатия и декодирования потока данных по алгоритму LZMA
Параметры
  • DictionarySize - Размер словаря для восстановления данных (от 0 до 28). Вычисляется как D=2^N, в последствии, при расшифровке, требуется D байт памяти (RAM). 20 = 1Mb
  • NumFastBytes - Порядок fastbytes (от 5 до 273). Обычно, большее число дает небольшой прирост процента сжатия и замедляет процесс кодирования
  • MatchFinder - Алгоритм вычисления хэша
  • Lc - Number of literal context bits
  • Lp - Number of literal pos bits
  • Pb - Number of pos bits
  • EndMarker - Записывать в конец потока данные о его окончании. При False, в заголовок потока будет сделана запись о его исходном размере
  • ProgressInterval - Интервал создания события, информирующего о состоянии прогресса кодирования
  • Методы
  • doCompress - Сжимает данные ARG(Stream, DictionarySize, NumFastBytes, ProgressInterval)
  • doDeCompress - Восстанавливает данные ARG(Stream, ProgressInterval)
  • События
  • onStream - Событие происходит всякий раз после сжатия/восстановления данных и возвращает их в поток ARG(Stream)
  • onProgress - Событие происходит через заданный промежуток ProgressInterval и выдает в поток номер кодируемого байта ARG(Progress)
  • onProgressMax - Событие происходит один раз перед началом кодирования потока и выдает его изначальный размер ARG(ProgressMax)
  • onError - Событие происходит в случае возникновении ошибки, и выдает ее код в поток ARG(Error)
  • Свойства
  • DestSize - Содержит размер данных после операции
  • Position - Содержит текущую позицию прогресса во время выполнения кодирования
  • OriginalSize - Содержит размер исходных данных, обновляется сразу после начала кодирования
  • Данные
  • Stream - Определяет идентификатор области данных
  • DictionarySize - Размер словаря для восстановления данных (от 0 до 28)
  • NumFastBytes - Порядок fastbytes (от 5 до 273)
  • ProgressInterval - Интервал создания события, информирующего о состоянии прогресса кодирования
  • Пример
    Пример использования компонента LZMA для сжатия/восстановления потока данных
    
    Add(MainForm,11110781,546,203)
    {
     Left=300
     Top=200
     Width=153
     Height=93
     Font=[Arial,8,0,0,204]
     Caption="LZMA Demo"
     BorderStyle=3
    }
    Add(LZMA,1755314,350,259)
    {
     ProgressInterval=1000
     Point(DestSize)
     Point(onProgress)
     Point(onProgressMax)
     Point(onError)
     link(onStream,1185699:doEvent1,[(390,265)(390,230)])
     link(Stream,12259100:Stream,[])
     link(onProgress,11003155:doPosition,[])
     link(onProgressMax,11003155:doMax,[])
     link(onError,7666746:doGetString,[])
    }
    Add(Button,10125888,154,147)
    {
     Left=10
     Top=10
     Font=[Arial,8,1,0,204]
     TabOrder=-1
     Caption="Pack"
     link(onClick,1096359:doEvent1,[])
     AddHint(-69,38,40,13,Caption)
    }
    Add(Button,6333852,154,210)
    {
     Left=80
     Top=10
     Font=[Arial,8,1,0,204]
     TabOrder=-1
     Caption="Unpack"
     link(onClick,5168960:doEvent1,[])
     AddHint(-69,40,53,13,Caption)
    }
    Add(ODialog,1914952,259,147)
    {
     FileName=""
     link(onExecute,12259100:doOpen,[])
    }
    Add(FileStream,12259100,350,147)
    {
     link(onLoad,16264439:doExecute,[])
    }
    Add(Memory,11596301,441,147)
    {
    }
    Add(SDialog,16264439,392,147)
    {
     FileName=""
     link(onExecute,11596301:doValue,[])
    }
    Add(FileStream,13389639,441,210)
    {
     Mode=1
     AutoCopy=0
     Point(doCopyFromStream)
     link(FileName,11596301:Value,[])
    }
    Add(Hub,1185699,399,224)
    {
     OutCount=4
     link(onEvent1,13389639:doCopyFromStream,[])
     link(onEvent2,13703545:doStop,[(482,237)(482,216)])
     link(onEvent3,12259100:doClose,[(425,244)(425,202)(338,202)(338,160)])
     link(onEvent4,6925404:doString,[(425,251)(425,353)(334,353)(334,321)])
    }
    Add(Message,8664802,441,315)
    {
     Caption="Done!!!"
    }
    Add(ProgressBar,11003155,441,266)
    {
     Top=41
     Width=147
     Align=4
     Ctl3D=0
     WinStyle=2
     Smooth=1
     ProgressColor=7554575
     Point(doMax)
    }
    Add(FormatStr,6925404,350,315)
    {
     DataCount=1
     Mask="File size is %1 bytes"
     link(onFString,8664802:doMessage,[])
     link(Str1,1755314:DestSize,[])
    }
    Add(Message,8038993,546,245)
    {
     Caption="Error"
     Icon=1
    }
    Add(TimeCounter,13703545,497,203)
    {
     link(onStop,11110781:doCaption,[(537,216)(537,209)])
    }
    Add(Hub,1096359,203,147)
    {
     link(onEvent1,7999595:doWork2,[])
     link(onEvent2,1934272:doStart,[(242,160)(242,209)])
    }
    Add(Hub,5168960,203,210)
    {
     link(onEvent1,7999595:doWork3,[(235,216)])
     link(onEvent2,13232037:doStart,[(235,223)(235,265)])
    }
    Add(HubEx,7999595,231,147)
    {
     link(onEvent,1914952:doExecute,[])
    }
    Add(Thread,1934272,259,203)
    {
     Delay=0
     FastStop=0
     link(onExec,4009044:doEvent1,[])
    }
    Add(Thread,13232037,259,259)
    {
     Delay=0
     FastStop=0
     link(onExec,2659492:doEvent1,[])
    }
    Add(Hub,4009044,301,203)
    {
     link(onEvent1,15631013:doWork2,[])
     link(onEvent2,1755314:doCompress,[(333,216)(333,265)])
    }
    Add(Hub,2659492,301,259)
    {
     link(onEvent1,15631013:doWork3,[(326,265)])
     link(onEvent2,1755314:doDeCompress,[])
    }
    Add(HubEx,15631013,322,203)
    {
     link(onEvent,13703545:doStart,[])
    }
    Add(StrList,7666746,497,238)
    {
     @Hint=#11:Коды ошибок|
     Strings=#38:Невозможно установить параметры сжатия|28:Входной поток очень короткий|20:Ошибка данных потока|24:Неверные свойства потока|0:|
     Point(onGetString)
     Point(doGetString)
     link(onGetString,8038993:doMessage,[])
     AddHint(53,60,83,13,@Hint)
    }
    
    
    Замечания
    Обновление элемента: [svn]LZMA.pas[/svn]
    BB-code статьи для вставки
    Всего комментариев: 0
    (комментарии к статье еще не добавлены)
    Комментарий
    ...