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