Qt LZO類別使用說明


目錄

  1. QtLzo類別
  2. ScriptableLzo類別
  3. QtLzo函數


QtLzo類別

功能

處理數據的LZO壓縮及解壓縮功能。

宣告

class QtLzo
{
  public:

    typedef enum      {
      LZO1x      =  1 ,
      LZO1       =  2 ,
      LZO1_99    =  3 ,
      LZO1a      =  4 ,
      LZO1a_99   =  5 ,
      LZO1b      =  6 ,
      LZO1b_99   =  7 ,
      LZO1b_999  =  8 ,
      LZO1c      =  9 ,
      LZO1c_99   = 10 ,
      LZO1c_999  = 11 ,
      LZO1f_1    = 12 ,
      LZO1f_999  = 13 ,
      LZO1x_1    = 14 ,
      LZO1x_1_11 = 15 ,
      LZO1x_1_12 = 16 ,
      LZO1x_1_15 = 17 ,
      LZO1x_999  = 18 ,
      LZO1y_1    = 19 ,
      LZO1y_999  = 20 ,
      LZO1z_999  = 21 ,
      LZO2a_999  = 22 }
      LzoMethods      ;

    explicit     QtLzo   (void) ;
    virtual     ~QtLzo   (void) ;

    virtual bool isLZO   (QByteArray & header) ;

    virtual void CleanUp (void) ;

    virtual bool IsCorrect          (int returnCode) ;
    virtual bool IsEnd              (int returnCode) ;
    virtual bool IsFault            (int returnCode) ;

    virtual int  BeginCompress      (int level = 9,int method = LZO1x) ;
    virtual int  BeginCompress      (QVariantList arguments = QVariantList() ) ;
    virtual int  doCompress         (const QByteArray & Source      ,
                                           QByteArray & Compressed) ;
    virtual int  doSection          (      QByteArray & Source      ,
                                           QByteArray & Compressed) ;
    virtual int  CompressDone       (QByteArray & Compressed) ;

    virtual int  BeginDecompress    (void) ;
    virtual int  doDecompress       (const QByteArray & Source        ,
                                           QByteArray & Decompressed) ;
    virtual int  undoSection        (      QByteArray & Source        ,
                                           QByteArray & Decompressed) ;
    virtual int  DecompressDone     (void) ;

    virtual bool IsTail             (QByteArray & header) ;

  protected:

    void * LzoPacket ;

    virtual void CompressHeader     (QByteArray & Compressed) ;
    virtual void CompressTail       (unsigned int checksum,QByteArray & Compressed) ;
    virtual int  DecompressHeader   (const QByteArray & Source) ;

  private:

};

說明


列舉型態

LzoMethods

名稱

作用
LZO1x
1
使用LZO1 X壓縮函式。
LZO1
2
使用LZO1通用壓縮函式。
LZO1_99
3
使用LZO1-99壓縮函式。
LZO1a
4
使用LZO1a通用壓縮函式。
LZO1a_99
5
使用LZO1a-99壓縮函式。
LZO1b
6
使用LZO1b通用壓縮函式。
LZO1b_99
7
使用LZO1b-99壓縮函式。
LZO1b_999
8
使用LZO1b-999壓縮函式。
LZO1c
9
使用LZO1c通用壓縮函式。
LZO1c_99
10
使用LZO1c-99壓縮函式。
LZO1c_999
11
使用LZO1c-999壓縮函式。
LZO1f_1
12
使用LZO1f-1壓縮函式。
LZO1f_999
13
使用LZO1f-999壓縮函式。
LZO1x_1
14
使用LZO1x-1壓縮函式。
LZO1x_1_11
15
使用LZO1x-1-11壓縮函式。
LZO1x_1_12
16
使用LZO1x-1-12壓縮函式。
LZO1x_1_15
17
使用LZO1x-1-15壓縮函式。
LZO1x_999
18
使用LZO1x-999壓縮函式。
LZO1y_1
19
使用LZO1y-1壓縮函式。
LZO1y_999
20
使用LZO1y-999壓縮函式。
LZO1z_999
21
使用LZO1z-999壓縮函式。
LZO2a_999
22
使用LZO2a-999壓縮函式。


bool isLZO(QByteArray & header)

判斷header數據是否為LZO的表頭。

LZO的表頭為7個位元組,如下:
0
1
2
3
4
5
6
7
0x00
0xE9
0x4C
0x5A
0x4F
0xFF
0x1A



void CleanUp (void)

清除LzoPacket以便重覆使用。如果您需要重覆使用QtLzo類別內的函式,第二次使用時,最好呼叫一次CleanUp()。


bool IsCorrect(int returnCode)

判斷壓縮或解壓縮時期的返回碼是否為操作正確的返回碼。


bool IsEnd(int returnCode)

判斷操作時期的返回碼是否為壓縮或是解壓縮完成。


bool IsFault(int returnCode)

判斷操作時期的返回碼是否為發生嚴重錯誤的狀況。


int BeginCompress(int level,int method) ;

設定壓縮的參數。

  1. level : 1~9,內定值為9。
  2. method : lzoMethods,內定值為LZO1x。

int BeginCompress(QVariantList arguments)

設定壓縮的參數。

  1. level : 1~9,內定值為9。
  2. method : lzoMethods,內定值為LZO1x。
  3. blocks : 每個區塊的大小,內定值為8192。
  4. output length : 輸出長度,內定值為0。

int doCompress(const QByteArray & Source,QByteArray & Compressed)

將Source壓縮到Compressed,成為LZO壓縮數據格式。這個函式只需要使用一次,整個數據封包會被包裝成完整的LZO檔案數據,主 要使用於確定原始數據大小的狀況下使用。

返回值為操作碼。


int doSection(QByteArray & Source,QByteArray & Compressed)

將Source壓縮到Compressed,成為LZO壓縮數據格式。這個函式是將數據拆成小包的數據分解來壓縮,主要使用於不確定原始數據大小 的狀況下使用,例如使用於網路即時傳輸用途時。

完成時需要呼叫CompressDone函式。

這個函式會將Source的數據由前面開始移除,移除的數據是已經完成壓縮的原始數據。

返回值為操作碼。


int CompressDone(QByteArray & Compressed)

使用doSection的壓縮方式時,數據完成時,需要呼叫這個函式來寫入結尾。


int BeginDecompress(void)

準備開始解壓縮。


int doDecompress(const QByteArray & Source,QByteArray & Decompressed)

將壓縮的原始數據Source解壓縮到Decompressed,Source基本上是個完整的LZO檔案。

返回值為操作碼。


int undoSection(QByteArray & Source,QByteArray & Decompressed)

將壓縮的原始數據Source解壓縮到Decompressed,成為原始數據。這個函式是將數據拆成小包的數據分解來解壓縮,主要使用於不確定 原始數據大小的狀況下使用,例如使用於網路即時傳輸用途時。

完成時需要呼叫DecompressDone函式。

這個函式會將Source的數據由前面開始移除,移除的數據是已經完成解壓縮的LZO數據。

返回值為操作碼。


int DecompressDone(void)

解壓縮完成時,需要呼叫這個函式。


bool IsTail(QByteArray & header)

判斷是否為LZO檔案格式的結尾。


void CompressHeader(QByteArray & Compressed)

製作LZO壓縮檔案格式表頭。


void CompressTail(unsigned int checksum,QByteArray & Compressed)

製作LZO壓縮檔案格式結尾。checksum是ADLER32。


int DecompressHeader(const QByteArray & Source)

檢查Source是否為LZO檔案表頭,並且返回數據開始的位置。


ScriptableLzo類別

功能

Qt Script的Javascript當中,處理LZO檔案的壓縮及解壓縮。

宣告

class ScriptableLzo : public QObject
                 , public QScriptable
                 , public QtLzo
{
  Q_OBJECT
  public:

    explicit     ScriptableLzo (QObject * parent) ;
    virtual     ~ScriptableLzo (void) ;

  protected:

  private:

  public slots:

    virtual bool ToLzo         (QString file,QString lzo,int level = 9,int method = QtLzo::LZO1x) ;
    virtual bool ToFile        (QString lzo,QString file) ;

  protected slots:

  private slots:

  signals:

};

說明


bool ToLzo(QString file,QString lzo,int level,int method)

將檔案file壓縮成lzo檔,成功則返回true,失敗則返回false。

參數說明:
  1. file : 原始檔案。
  2. lzo : LZO壓縮檔。
  3. level : 1 ~ 9,內定值為9。
  4. method : lzoMethods,內定值為LZO1x。


bool ToFile(QString lzo,QString file)

將lzo檔案解壓縮成file,成功則返回true,失敗則返回false。


QtLzo函數

Qt LZO目前提供六個函數。


說明


bool ToLZO (const QByteArray & data,QByteArray & lzo,int level,int method)

將數據壓縮成LZO壓縮格式,成功則返回true,失敗則返回false。

參數說明:
  1. data : 原始數據。
  2. lzo : LZO壓縮數據。
  3. level : 1 ~ 9,內定值為9。
  4. method : lzoMethods,內定值為LZO1x。

bool FromLZO (const QByteArray & lzo ,QByteArray & data)

將LZO數據解壓縮成原始數據,成功則返回true,失敗則返回false。

參數說明:
  1. lzo : LZO壓縮數據。
  2. data : 原始數據。

bool SaveLZO (QString filename,QByteArray & data,int level,int method)

將數據壓縮成LZO壓縮格式,並儲存到檔案中,成功則返回true,失敗則返回false。

參數說明:
  1. filename : LZO檔案名稱。
  2. data : 原始數據。
  3. level : 1 ~ 9,內定值為9。
  4. method : lzoMethods,內定值為LZO1x。

bool LoadLZO (QString filename,QByteArray & data)

將LZO檔案解壓縮成原始數據,成功則返回true,失敗則返回false。

參數說明:
  1. filename : LZO檔案名稱。
  2. data : 原始數據。

bool FileToLzo (QString file,QString lzo,int level,int method)

將檔案file壓縮成lzo檔,成功則返回true,失敗則返回false。

參數說明:
  1. file : 原始檔案。
  2. lzo : LZO壓縮檔。
  3. level : 1 ~ 9,內定值為9。
  4. method : lzoMethods,內定值為LZO1x。


bool LzoToFile (QString lzo,QString file)

將lzo檔案解壓縮成file,成功則返回true,失敗則返回false。



Neutrino International Inc. 2001~2015