Qt LZO類別使用說明
目錄
- QtLzo類別
- ScriptableLzo類別
- 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) ;
設定壓縮的參數。
- level : 1~9,內定值為9。
- method : lzoMethods,內定值為LZO1x。
int BeginCompress(QVariantList arguments)
設定壓縮的參數。
- level : 1~9,內定值為9。
- method : lzoMethods,內定值為LZO1x。
- blocks : 每個區塊的大小,內定值為8192。
- 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。
參數說明:
- file : 原始檔案。
- lzo : LZO壓縮檔。
- level : 1 ~ 9,內定值為9。
- 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 = 9,int method = QtLzo::LZO1x)
- bool FromLZO (const QByteArray & lzo ,QByteArray & data)
- bool SaveLZO (QString filename,QByteArray & data,int level = 9,int method = QtLzo::LZO1x)
- bool LoadLZO (QString filename,QByteArray & data)
- bool FileToLzo (QString file,QString lzo,int level =
9,int method = QtLzo::LZO1x)
- bool LzoToFile (QString lzo,QString file)
說明
bool ToLZO (const
QByteArray & data,QByteArray & lzo,int level,int method)
將數據壓縮成LZO壓縮格式,成功則返回true,失敗則返回false。
參數說明:
- data : 原始數據。
- lzo : LZO壓縮數據。
- level : 1 ~ 9,內定值為9。
- method : lzoMethods,內定值為LZO1x。
bool FromLZO (const
QByteArray & lzo
,QByteArray &
data)
將LZO數據解壓縮成原始數據,成功則返回true,失敗則返回false。
參數說明:
- lzo : LZO壓縮數據。
- data : 原始數據。
bool SaveLZO (QString filename,QByteArray & data,int level,int method)
將數據壓縮成LZO壓縮格式,並儲存到檔案中,成功則返回true,失敗則返回false。
參數說明:
- filename : LZO檔案名稱。
- data : 原始數據。
- level : 1 ~ 9,內定值為9。
- method : lzoMethods,內定值為LZO1x。
bool LoadLZO (QString filename,QByteArray & data)
將LZO檔案解壓縮成原始數據,成功則返回true,失敗則返回false。
參數說明:
- filename : LZO檔案名稱。
- data : 原始數據。
bool FileToLzo (QString file,QString lzo,int level,int method)
將檔案file壓縮成lzo檔,成功則返回true,失敗則返回false。
參數說明:
- file : 原始檔案。
- lzo : LZO壓縮檔。
- level : 1 ~ 9,內定值為9。
- method : lzoMethods,內定值為LZO1x。
bool LzoToFile (QString lzo,QString file)
將lzo檔案解壓縮成file,成功則返回true,失敗則返回false。
Neutrino
International Inc. 2001~2015