天天看點

序列化壓縮實作及對比測試

網上介紹序列化壓縮的用gzip比較多。寫個測試代碼,測試一下四種序列化方式:

無壓縮

zlib壓縮

gzip壓縮

zip壓縮

測例結果顯示壓縮效果:gzip壓縮 > zlib壓縮 > zip壓縮 > 無壓縮

測例結果顯示壓縮速度:zlib壓縮 > gzip壓縮 > zip壓縮 = 無壓縮

确實用gzip成本效益比較高!

1. zlib

zlib是一個開源庫,提供了在記憶體中壓縮和解壓的函數。zlib它的設計目标是處理單純的資料(而不管資料的來源是什麼)。

2.  gzip

gzip是UNIX下的一種資料格式(.tar.gz)。gzip是在zlib之上,包了一層,在頭和尾添加了一些額外的資訊。

gzip是一種檔案壓縮工具(或該壓縮工具産生的壓縮檔案格式),它的設計目标是處理單個的檔案。gzip在壓縮檔案中的資料時使用的就是zlib。為了儲存與檔案屬性有關的資訊,gzip需要在壓縮檔案(*.gz)中儲存更多的頭資訊内容,而zlib不用考慮這一點。但gzip隻适用于單個檔案,是以我們在UNIX/Linux上經常看到的壓縮包字尾都是*.tar.gz或*.tgz,也就是先用tar把多個檔案打包成單個檔案,再用gzip壓縮的結果。

3. zip

zip隻是一種資料結構,跟rar同級别的。zip是适用于壓縮多個檔案的格式(相應的工具有PkZip和WinZip等),是以,zip檔案還要進一步包含檔案目錄結構的資訊,比gzip的頭資訊更多。但需要注意,zip格式可采用多種壓縮算法,我們常見的zip檔案大多不是用zlib的算法壓縮的,其壓縮資料的格式與gzip大不一樣。

Java SDK提供了對上述三種壓縮技術的支援:Inflater類和Deflater類直接用zlib庫對資料壓縮/解壓縮,GZIPInputStream類和GZIPOutputStream類提供了對gzip格式的支援,ZipFile、ZipInputStream、ZipOutputStream則用于處理zip格式的檔案。

是以,你應當根據你的具體需求,選擇不同的壓縮技術:如果隻需要壓縮/解壓縮資料,你可以直接用zlib實作,如果需要生成gzip格式的檔案或解壓其他工具的壓縮結果,你就必須用gzip或zip等相關的類來處理了。