Вверх ↑
Пакеты 
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
    (комментарии к статье еще не добавлены)
    Комментарий
    ...