libzling(https://github.com/richox/libzling)是一款高性能的數據壓縮庫,在壓縮時間和壓縮率上都超過了流行的zlib/gzip。libzling使用的是ROLZ字典算法和Polar編碼,這兩個算法的說明可以參考這兩篇文章:http://www.cnblogs.com/richselian/archive/2012/11/10/2764427.html、http://www.cnblogs.com/richselian/archive/2012/11/09/2763162.html。
libzling使用的是1階ROLZ字典編碼和0階Polar編碼,在權威的 Large Text Compression Benchmark 測評上,壓縮時間、解壓時間和壓縮率都分別超過gzip約50%、20%、10%左右。libzling最適用於一般的文本數據,對大量冗余的文本日志數據性能更佳,壓縮率可以壓縮gzip的30%以上。
使用libzling的方式很簡單,首先從github上clone最新的版本:
git clone https://github.com/richox/libzling
然后cd到build目錄下,使用cmake編譯(cmake的具體安裝方法可以Google):
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local make make install
以下是最簡單的使用libzling的方式,具體的接口文檔現在還沒有完成,可以參考源代碼中的demo程序:./sample/zling.cpp
代碼可以使用g++編譯,編譯選項加上-lzling即可。
1 #include "libzling.h" 2 3 int main() { 4 // compress 5 { 6 FILE* fin = fopen("./1.txt", "rb"); 7 FILE* fout = fopen("./1.txt.zlng", "wb"); 8 9 baidu::zling::FileInputer inputer(fin); 10 baidu::zling::FileOutputer outputer(fout); 11 12 baidu::zling::Encode(&inputer, &outputer); 13 fclose(fin); 14 fclose(fout); 15 } 16 17 // decompress 18 { 19 FILE* fin = fopen("./1.txt.zlng", "rb"); 20 FILE* fout = fopen("./2.txt", "wb"); 21 22 baidu::zling::FileInputer inputer(fin); 23 baidu::zling::FileOutputer outputer(fout); 24 25 baidu::zling::Decode(&inputer, &outputer); 26 fclose(fin); 27 fclose(fout); 28 } 29 return 0; 30 }