程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LZO 使用和介紹,LZO使用介紹

LZO 使用和介紹,LZO使用介紹

編輯:C++入門知識

LZO 使用和介紹,LZO使用介紹


LZO說明

摘要

LZO 是一個用 ANSI C 語言編寫的無損壓縮庫。他能夠提供非常快速的壓縮和解壓功能。解壓並不需要內存的支持。即使使用非常大的壓縮比例進行緩慢壓縮出的數據,依然能夠非常快速的解壓。LZO 遵循 GNU 的 GPL 使用許可。

介紹

LZO 非常適合進行數據的實時壓縮解壓處理,這就是說他更關心操作速度,而不是壓縮比例。

LZO 使用 ANSI C 語言編寫,並且壓縮後的數據也被設計為可以跨平台使用的格式。

LZO 擁有如下的特點:

  • 解壓速度很快,並且很簡單;
  • 解壓時不需要內存支持;
  • 壓縮的速度還不錯;
  • 壓縮時只需要 64 KiB 的內存支持;
  • 壓縮比例可以根據需要調節,而這並不影響解壓的效率,提高壓縮比例自然會降低壓縮速度;
  • 壓縮包含了很多的壓縮級別,提供很多選擇;
  • 提供只需要 8 KiB 內存支持的壓縮級別;
  • 提供線程安全;
  • 提供無損壓縮;

LZO提供多重壓縮,和復原解壓;

設計標准

LZO 以處理速度為原則設計。解壓速度要快於壓縮速度。能夠提供給任何程序實時解壓的功能。LZO1X的解壓是按照 i386 編碼優化的。

事實上,是通過解壓算法定義的壓縮數據結構,最後采用手工測試數據驗證了這個結構。

效果

在古老的 Pentium 133 的設備上,我們運行了 Calgary Corpus 的測試數據。數據采用了 256 KiB的大小。

LZOxx-N 定義了使用的算法名稱,N代表壓縮級別。1-9 級別使用 64 KiB 內存,他主要提供更快的壓縮速度。99 級別使用 256 KiB 內存,提供更大的壓縮比例,但是處理速度依然很快。999 級別是按照壓縮比例優化的算法,他的壓縮速度很慢,並且使用大量的內存,這種級別一般用於生成預壓縮數據。

C 語言版本的 LZO1X-1 算法要比最快的 ZLIB 壓縮級別,快4-5倍的速度。當然他也在壓縮比例、壓縮時間、解壓時間方便優於 LZRW1-A 和 LZV 這些算法。

 +------------------------------------------------------------------------+
 | Algorithm        Length  CxB   ComLen  %Remn  Bits   Com K/s   Dec K/s |
 | ---------        ------  ---   ------  -----  ----   -------   ------- |
 |                                                                        |
 | memcpy()         224401    1   224401  100.0  8.00  60956.83  59124.58 |
 |                                                                        |
 | LZO1-1           224401    1   117362   53.1  4.25   4665.24  13341.98 |
 | LZO1-99          224401    1   101560   46.7  3.73   1373.29  13823.40 |
 |                                                                        |
 | LZO1A-1          224401    1   115174   51.7  4.14   4937.83  14410.35 |
 | LZO1A-99         224401    1    99958   45.5  3.64   1362.72  14734.17 |
 |                                                                        |
 | LZO1B-1          224401    1   109590   49.6  3.97   4565.53  15438.34 |
 | LZO1B-2          224401    1   106235   48.4  3.88   4297.33  15492.79 |
 | LZO1B-3          224401    1   104395   47.8  3.83   4018.21  15373.52 |
 | LZO1B-4          224401    1   104828   47.4  3.79   3024.48  15100.11 |
 | LZO1B-5          224401    1   102724   46.7  3.73   2827.82  15427.62 |
 | LZO1B-6          224401    1   101210   46.0  3.68   2615.96  15325.68 |
 | LZO1B-7          224401    1   101388   46.0  3.68   2430.89  15361.47 |
 | LZO1B-8          224401    1    99453   45.2  3.62   2183.87  15402.77 |
 | LZO1B-9          224401    1    99118   45.0  3.60   1677.06  15069.60 |
 | LZO1B-99         224401    1    95399   43.6  3.48   1286.87  15656.11 |
 | LZO1B-999        224401    1    83934   39.1  3.13    232.40  16445.05 |
 |                                                                        |
 | LZO1C-1          224401    1   111735   50.4  4.03   4883.08  15570.91 |
 | LZO1C-2          224401    1   108652   49.3  3.94   4424.24  15733.14 |
 | LZO1C-3          224401    1   106810   48.7  3.89   4127.65  15645.69 |
 | LZO1C-4          224401    1   105717   47.7  3.82   3007.92  15346.44 |
 | LZO1C-5          224401    1   103605   47.0  3.76   2829.15  15153.88 |
 | LZO1C-6          224401    1   102585   46.5  3.72   2631.37  15257.58 |
 | LZO1C-7          224401    1   101937   46.2  3.70   2378.57  15492.49 |
 | LZO1C-8          224401    1   100779   45.6  3.65   2171.93  15386.07 |
 | LZO1C-9          224401    1   100255   45.4  3.63   1691.44  15194.68 |
 | LZO1C-99         224401    1    97252   44.1  3.53   1462.88  15341.37 |
 | LZO1C-999        224401    1    87740   40.2  3.21    306.44  16411.94 |
 |                                                                        |
 | LZO1F-1          224401    1   113412   50.8  4.07   4755.97  16074.12 |
 | LZO1F-999        224401    1    89599   40.3  3.23    280.68  16553.90 |
 |                                                                        |
 | LZO1X-1(11)      224401    1   118810   52.6  4.21   4544.42  15879.04 |
 | LZO1X-1(12)      224401    1   113675   50.6  4.05   4411.15  15721.59 |
 | LZO1X-1          224401    1   109323   49.4  3.95   4991.76  15584.89 |
 | LZO1X-1(15)      224401    1   108500   49.1  3.93   5077.50  15744.56 |
 | LZO1X-999        224401    1    82854   38.0  3.04    135.77  16548.48 |
 |                                                                        |
 | LZO1Y-1          224401    1   110820   49.8  3.98   4952.52  15638.82 |
 | LZO1Y-999        224401    1    83614   38.2  3.05    135.07  16385.40 |
 |                                                                        |
 | LZO1Z-999        224401    1    83034   38.0  3.04    133.31  10553.74 |
 |                                                                        |
 | LZO2A-999        224401    1    87880   40.0  3.20    301.21   8115.75 |
 +------------------------------------------------------------------------+

注解:

  • CxB 是塊的數目;
  • K/s 是每秒處理 1KB 沒有壓縮的數據的速度;
  • 匯編的解壓速度將會更快;

簡單文檔

LZO 是塊壓縮算法,他壓縮和解壓一個塊數據。壓縮和解壓的塊大小必須一樣。

LZO 將塊數據壓縮成匹配數據(滑動字典)和非匹配的文字序列。LZO 對於長匹配和長文字序列有專門的處理,這樣對於高冗余的數據能夠獲得很好的效果,這樣對於不可壓縮的數據,也能得到較好的結果。

在處理不可壓縮數據時,LZO 將擴展輸入數據,每1024個字節最大增加 64 個字節。

我已經通過類似於 valgrind 這樣的內存檢查工具驗證過 LZO 程序,並且也使用了超過千兆字節的數據,進行各種參數調整,檢查過各種潛在的問題。LZO 目前不存在任何已知 BUG。

各種算法說明

這裡實現了很多的算法,但是我希望提供沒有限制的向下兼容性,所以以後並不會取消現有的內容。

就像需要對象文件都是相對獨立的,若通過靜態鏈接使用 LZO 庫,只會增加很少的容量(大約幾KiB),以為內只要在真正使用 LZO 功能時這個模塊才會被加載。

1996年3月,我在 newsgroups.comp.compression 和 comp.compression.research 公布了 LZO1 和 LZO1A。他們主要處理了兼容性的問題。LZO2A解壓的速度非常慢,並且也沒有能提供一個較快的壓縮速度。

在我的試驗中可以看到,LZO1B適合處理大量的數據,或者有高冗余性的數據。LZO1F適合處理小量數據和二進制數據。LZO1X適合各種環境。LZO1Y 和 LZO1Z 跟 LZO1X 很相像,他們能夠在一些環境中達到更好的壓縮比例。

請注意,你有很多的選擇。

使用 LZO 庫

無論數據的大小,使用 LZO 庫的基本功能非常的簡單。我們假設你打算使用 LZO1X-1的算法處理你的數據。

壓縮

1 include <lzo/lzo1x.h>  
2 call lzo_init ()  
3 通過 lzo1x_1_compress () 壓縮你的數據  
4 編譯連接 LZO 庫  

解壓

1 include <lzo/lzo1x.h>  
2 call lzo_init ()  
3 通過 lzo1x_decompress () 解壓數據  
4 編譯連接 LZO 庫  


在源碼包的 examples/simple.c 有完整的范例代碼。也可以查看 LZO.FAQ 獲得更多內容。

原始文件:

  • http://www.oberhumer.com/opensource/lzo/lzodoc.php

LZO FAQ

原始文件:

    • http://www.oberhumer.com/opensource/lzo/lzofaq.php

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved