網上介紹序列化壓縮的用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等相關的類來處理了。