最近因爲項目須要,須要我諒解一下關於在移動平臺的解壓功能,在移動平臺解壓,我我的感受是沒有太大必要的,畢竟手機的性能有限。可是,不口否定,移動端的解壓功能又是必備的,由於若是對於一些資源管理器類的應用,接入解壓功能,會更徹底,例如:資源管理器、手機QQ、UC瀏覽器等一些列應用,涉及到文件的管理與傳輸,那麼查看壓縮包下的內容就會顯得十分必要了。因此說,若是有必要的話,移動應用仍是須要支持的解壓的功能的。html
既然要解壓,那就必須先了解壓縮文件,這篇文章只是初稿,因此這裏就先介紹幾種常見的壓縮文件格式,之後會慢慢補充。java
- zip格式,ZIP是一個計算機文件的壓縮的算法,原名Deflate(真空),發明者爲菲利普·卡茲(Phil Katz)),他於1989年1月公佈了該格式的資料。ZIP一般使用後綴名「.zip」,它的MIME格式爲 application/zip 。目前,ZIP格式屬於幾種主流的壓縮格式之一,其競爭者包括RAR格式以及開放源碼的7-Zip格式。從性能上比較,RAR格式較ZIP格式壓縮率較高,可是它的壓縮時間遠遠高於Zip。而7-Zip因爲提供了免費的壓縮工具而逐漸在更多的領域獲得應用)。
- rar格式,一樣是無損數據壓縮,RAR文件一般比[IP文件壓縮比要高,可是壓縮速度較慢。由於RAR文件頭也要佔據必定空間,在數據壓縮餘地不大時,壓縮過的文件可能比原文件要大。RAR的一個主要優勢是能夠把文件壓縮目標分割到多個文件,而且很容易從這樣的分割的壓縮文件解壓出源文件,其MIME格式爲application/x-rar-compressed。
- 7z格式,7z 是一種主流高效的壓縮格式,它擁有極高的壓縮比。在計算機科學中,7z是一種可使用多種壓縮算法進行數據壓縮的檔案格式。該格式最初被7-Zip實現並採用,可是這種檔案格式是公有的,而且7-Zip軟件自己亦在GNU寬通用公共許可證(GNU LGPL)協議下開放源代碼。目前LZMA軟件開發工具包的最新版本爲V9.34。7z格式的MIME類型爲application/x-7z-compressed。
解壓過程是在一個線程裏運行,而後會經過handler回調到ui線程中,通知相應地解壓進度以及相關信息.
具體效果以下:linux
由此,zip文件格式的解壓過程至此爲止。android
其同回調方法是和以前的一致的,因此有興趣的能夠看個人demo。c++
http://stackoverflow.com/questions/14024874/j7zip-on-Android-extracting-from-an-archive-and-listing-contents/14676769#14676769git
因此用jbinding的想法是泡湯了,經過上述問題,我找到了andro7z 這個思路的解決方法,也是提供了相應地c代碼,須要咱們本身進行編譯ndk,打包成動態庫來執行。
可是我想有沒有更好的方法呢?
通過老大的指點,我找找到了一個github現成的工程AndroidUn7zip
做者已經作好了編譯而且打包成了動態庫和jar包,因此咱們若是有須要的話,可直接把相應地庫下載下來就能夠運行了:
具體使用方法以下:github
因爲是採用的ndk的方法,因此咱們比較難監聽解壓的過程,不過對於這種須要高性能的解壓的方法,咱們也很難去添加進度。
並且做者還對其餘的格式解壓也經行了封裝,可使用同一個庫對不一樣的格式解壓的。算法
https://github.com/hzy3774/AndroidP7zip
真心感謝老大和做者的指導。windows
對於還有一種7z的解壓方法,就是利用compressor開源庫解壓,也能夠在android上運行,可是實際使用過程當中仍是有點問題的,等之後有時間再寫具體的文章來講明。瀏覽器
demo結構:
我以爲整個探究過程仍是蠻有意思的,學到了許多之前沒有接觸到的知識,有時間我會把這個demo完善成一個解壓類庫,到時候就能夠直接調用了,歡迎看一下個人這個解壓demo,但願有能力的能夠完善這個demo。