Qt LZO使用範例


目錄


「QtLzo/examples/lzotool」目錄當中有使用範例程式。


僅使用記憶體的壓縮方式

僅使用記憶體的壓縮方式經常使用於網路傳輸的應用上。

完整的原始數據一次壓縮成LZO格式


使用內定參數

使用函數的方式
QByteArray sourceData ;
QByteArray lzoData ;
// ...
// Load sourceData by your own code
// ...
if ( ToLZO ( sourceData , lzoData ) ) {
  // handling LZO compressed data
} else {
  // error when compress data into LZO format
}

使用QtLzo物件的方式

QByteArray   sourceData                   ;
QByteArray lzoData ;
QtLzo        L                            ;
int
r ;
QVariantList v                            ;
v << level                                ;
v << method                               ;
v << blocks ;
v << outputLength ;
r = L . BeginCompress ( v )               ;
if ( L . IsCorrect ( r ) )                {
  L . doCompress ( sourceData , lzoData ) ;
}                                         ;


未知長度的原始數據分解成多次壓縮成LZO格式


QByteArray   sourceData                      ;
QByteArray lzoData ;
QByteArray Compressed ;
QtLzo        L                               ;
int
r ;
QVariantList v                               ;
v << level                                   ; // default 9
v << method                                  ; // default LZO1x
v << blocks ; // default 8192
v << outputLength ; // default 0
r = L . BeginCompress ( v )                  ;
while ( MyOwnObtainData ( sourceData ) ) {
  r = L . doSection ( sourceData , lzoData ) ;
if ( L . IsCorrect ( r ) ) { if ( lzoData . size ( ) > 0 ) {
Compressed . append ( lzoData ) ; // or handling the lzoData by your own function
} ;
} ;
} ;
L . CompressDone ( Compressed ) ;


僅使用記憶體的解壓方式


完整的壓縮數據一次解壓縮原始數據格式


使用函數的方式
QByteArray sourceData ;
QByteArray lzoData ;
// ...
// Load lzoData by your own code
// ...
if ( FromLZO ( lzoData , sourceData ) ) {
  // handling sourceData
} else {
  // error when decompress LZO data into sourceData
}

使用QtLzo物件的方式
QByteArray sourceData                       ;
QByteArray lzoData                          ;
QtLzo      L                                ;
int        r                                ;
r = L . BeginDecompress ( )                 ;
if ( L . IsCorrect ( r ) )                  {
  L . doDecompress ( lzoData , sourceData ) ;
}                                           ;

未知長度的壓縮數據分解成多次解壓成原始數據格式


QByteArray sourceData                          ;
QByteArray lzoData                             ;
QByteArray Decompressed ; QtLzo L ;
int        r                                   ;
r = L . BeginDecompress ( )                    ;
while ( MyOwnObtainLZO ( lzoData ) ) {
  r = L . undoSection ( lzoData , sourceData ) ;
  if ( L . IsCorrect ( r ) )                   {
if ( sourceData . size ( ) > 0 ) {
Decompressed . append ( sourceData ) ;
    }                                          ;
  }                                            ;
}                                              ;


將記憶體數據壓縮到檔案的方式


QByteArray sourceData ;
// ...
// Obtain sourceData by your own code
// ...
if ( SaveLZO ( "LzoFilename.lzo" , sourceData ) ) {
  // successful compress sourceData into LzoFilename.lzo file
} else {
  // error to compress into LZO file
}


將檔案解壓到記憶體數據的方式


QByteArray sourceData ;

if ( LoadLZO ( "LzoFilename.lzo" , sourceData ) ) {
  // successful decompress LzoFilename.lzo file into sourceData
} else {
  // error to decompress LZO file
}


將壓縮檔案解壓縮到另一個檔案的方式


if ( LzoToFile ( "LzoFilename.lzo" , "NormalFilename.dat" ) ) {
  // successful decompress LzoFilename.lzo file into NormalFilename.dat
} else {
  // error to decompress LZO file
}


將一般檔案壓縮到LZO檔案


if ( FileToLzo ( "NormalFilename.dat" , "LzoFilename.lzo" ) ) {
  // successful compress NormalFilename.dat into LzoFilename.lzo
} else {
  // error to compress into LZO file
}


使用Javascript(Qt Script)的方式


使用Qt Script呼叫ScriptableLzo


QScriptValue AttachmentLzo(QScriptContext * context,QScriptEngine * engine)
{
  ScriptableLzo * lzo = new ScriptableLzo ( engine ) ;
  return engine -> newQObject             ( lzo    ) ;
}

bool JsLzo(QString ifile,QString entry)
{
  QString    m                                                               ;
  QByteArray SCRIPT                                                          ;
  ////////////////////////////////////////////////////////////////////////////
  if ( ( ! LoadAll ( ifile , SCRIPT ) ) || ( SCRIPT . size ( ) <= 0 ) )      {
//
ifile can not be loaded
    return false                                                             ;
  }                                                                          ;
  ////////////////////////////////////////////////////////////////////////////
  QScriptEngine    Engine                                                    ;
  QString          script                                                    ;
  QScriptValue     func                                                      ;
  QScriptValue     global                                                    ;
  QScriptValue     lzo                                                       ;
  QScriptValue     again                                                     ;
  QScriptValueList args                                                      ;
  ////////////////////////////////////////////////////////////////////////////
  script = QString::fromUtf8     ( SCRIPT                                  ) ;
  func   = Engine . evaluate     ( script                                  ) ;
  global = Engine . globalObject (                                         ) ;
  global . setProperty ( "QtLZO"  , Engine . newFunction ( AttachmentLzo ) ) ;
  lzo    = global . property     ( entry                                   ) ;
  ////////////////////////////////////////////////////////////////////////////
  if ( lzo . isFunction ( ) )                                                {
    again = lzo . call ( func , args  )                                      ;
  } else                                                                     {
    // function entry can not be found in ifile.
    return false                                                             ;
  }                                                                          ;
  ////////////////////////////////////////////////////////////////////////////
  return true                                                                ;
}

LZO.js

function CompressLZO()
{
  lzo = new QtLZO() ;
  lzo . ToLzo ( "Testing.txt" , "Testing.lzo" , 9 , 1 ) ;
  delete lzo ;
}

function DecompressLZO()
{
  lzo = new QtLZO() ;
  lzo . ToFile ( "Testing.lzo" , "Testing.txt" ) ;
  delete lzo ;
}


Neutrino International Inc. 2001~2015