壓縮過程:
1.調用aP_max_packed_size得到存放壓縮文件的空間大小
2.調用aP_workmem_size得到工作空間大小
3.調用aPsafe_pack
5.WirteFile寫入文件
解壓過程:
1.調用aPsafe_get_orig_size得到解壓後文件大小
2.調用aPsafe_depack解壓
3.WirteFile寫入解壓後的文件
——————————————————————————————————
常用函數解析:
size_t aP_max_packed_size( size_t input_size )
參數:未壓縮的數據大小
返回值:壓縮後的數據可能的所需要的最大值
Computes the maximum possible compressed size possible when
compressing input_size bytes of incompressible data.
size_t aP_workmem_size( size_t input_size )
計算aP_pack函數所需要的workmem[] buffer的大小
參數:未壓縮的數據的字節數
返回值: work buffer所需要的空間長度,總是返回 640k (640*1024).
size_t aPsafe_pack( const void *source,
void *destination,
size_t length,
void *workmem,
int (*callback)(size_t, size_t, size_t, void *),
void *cbparam )
函數aP_pack的封裝函數,添加了一個頭部,頭部包含了原始數據的大小
和原始數據的CRC檢驗值
參數:
source - 指向被壓縮數據的指針
destination - 存儲壓縮數據的指針.
length - 原始數據(未壓縮數據)的字節數.
workmem - 壓縮時指向工作空間的指針
callback - 回調函數的指針,也可以爲NULL
cbparam - 回調函數的參數
返回值:
成功返回壓縮後數據的字節數,失敗返回APLIB_ERROR
size_t aPsafe_get_orig_size( const void *source )
返回解壓後數據的長度
參數:
source -被壓縮的數據的指針
返回值:
成功解壓後的數據長度,失敗APLIB_ERROR
size_t aPsafe_depack( const void *source,
size_t srclen,
void *destination,
size_t dstlen )
函數aP_depack_asm_safe的封裝函數,函數檢查壓縮數據的CRC32校驗值
參數:
source - 指向壓縮後數據的指針
srclen - 壓縮後的數據的字節數
destination - 解壓後的數據存放空間的指針
dstlen - 解壓後數據的字節數
返回值:
成功返回解壓後的數據大小 ,錯誤返回APLIB_ERROR