android解壓縮GZIP格式的網頁資料
轉載請註明來自:http://blog.csdn.net/icyfox_bupt/article/details/9572813
進行安卓的軟體開發就少不了和網路上的資料打交道,為了做出讓使用者喜愛的軟體,我們需要想一切辦法減少下載流量,加快下載速度。
GZIP就是現有的一種網站壓縮格式,只要網站支援,我們就可以從網站上下載壓縮過的資料包。
GZIP的介紹請看百度百科:http://baike.baidu.com/view/966625.htm
啟用GZIP:
啟用GZIP通訊需要伺服器和客戶端雙方的支援,在伺服器方面需要開啟GZIP選項,(詳見WIN2003中IIS開啟GZIP的方法),這會增加一些伺服器的負擔。
如果伺服器不是你架設的,那就不用管。
在客戶端方面,進行HTTP請求時,要在HTTP的header處新增:
- Accept-Encoding: gzip,deflate
Accept-Encoding: gzip,deflate
如果伺服器支援,則在返回資料包的header中會包含:
- Accept-Encoding: gzip,deflate
Accept-Encoding: gzip,deflate
解壓GZIP:
下面將使用程式碼的方式表示解壓GZIP的方法,下面這個函式使用了get方法獲取網路上的資料,獲取後使用GZIPinputStream類對GZIP資料進行了解壓。並返回了得到的字串:
- public String get(String url){
- HttpGet get=new HttpGet(url);
- HttpClient client=new DefaultHttpClient();
- get.addHeader("accept-encoding","gzip, deflate");
- //在包頭中新增gzip格式
- HttpResponse response=null;
- ByteArrayBuffer bt= new ByteArrayBuffer(4096);
- String resultString="";
- try{
- response=client.execute(get);
- //執行Get方法
- HttpEntity he = response.getEntity();
- //以下是解壓縮的過程
- GZIPInputStream gis = new GZIPInputStream(he.getContent());
- int l;
- byte[] tmp = new byte[4096];
- while ((l=gis.read(tmp))!=-1){
- bt.append(tmp, 0, l);
- }
- resultString = new String(bt.toByteArray(),"utf-8");
- //後面的引數換成網站的編碼一般來說都是UTF-8
- }
- catch(Exception e)
- {
- Log.i("ERR",e.toString()); //丟擲處理中的異常
- }
- return resultString;
- }
public String get(String url){
HttpGet get=new HttpGet(url);
HttpClient client=new DefaultHttpClient();
get.addHeader("accept-encoding","gzip, deflate");
//在包頭中新增gzip格式
HttpResponse response=null;
ByteArrayBuffer bt= new ByteArrayBuffer(4096);
String resultString="";
try{
response=client.execute(get);
//執行Get方法
HttpEntity he = response.getEntity();
//以下是解壓縮的過程
GZIPInputStream gis = new GZIPInputStream(he.getContent());
int l;
byte[] tmp = new byte[4096];
while ((l=gis.read(tmp))!=-1){
bt.append(tmp, 0, l);
}
resultString = new String(bt.toByteArray(),"utf-8");
//後面的引數換成網站的編碼一般來說都是UTF-8
}
catch(Exception e)
{
Log.i("ERR",e.toString()); //丟擲處理中的異常
}
return resultString;
}
上面的程式碼比較簡單,就不多解釋了。(其實是我自己也迷迷糊糊啦)思路來自http://bbs.csdn.net/topics/340021298這個文章,大家可以去看。
如果不太理解把上面這段程式碼直接複製也可以當做get函式來用了。
雖然程式碼簡單,但是GZIP的效果是不容小覷的。對於普通的網頁來說,壓縮後的資料一般是原來是1/2~2/3,對於一些冗餘較大的資料,比如微博、論壇這些冗餘較大的API資料,甚至可以達到1/4的效果。這對於省流量來說是非常可觀的。
相關文章
- Java實現檔案壓縮與解壓[zip格式,gzip格式]Java
- 檢視網頁是否壓縮gzip+編碼方式網頁
- 解析ws訂閱返回的GZIP 壓縮資料
- linux下gzip的壓縮詳解Linux
- Android總結之Gzip/Zip壓縮Android
- 使用filter實現網站的gzip壓縮Filter網站
- 關於Java的GZIP壓縮與.net C#的GZIP壓縮的差異JavaC#
- Apache 開啟gzip壓縮Apache
- 使用gzip壓縮檔案
- Linux下常用壓縮格式的壓縮與解壓方法Linux
- Apache開啟gzip壓縮提高網站速度Apache網站
- 分析核心對gzip壓縮檔案進行解壓的方法(轉)
- Python爬取網頁Utf-8解碼錯誤及gzip壓縮問題的解決辦法Python網頁
- Nginx開啟gzip壓縮大幅提高頁面載入速度Nginx
- Linux下常用壓縮格式的壓縮與解壓方法---轉載Linux
- C#實現通過Gzip來對資料進行壓縮和解壓C#
- 給Tomcat,Apache配置gzip壓縮(HTTP壓縮)功能 (轉)TomcatApacheHTTP
- unix和linux下常用壓縮格式的壓縮與解壓方法(轉)Linux
- Vue開啟gzip壓縮檔案Vue
- Apache開啟GZIP壓縮功能方法Apache
- vue-cli3.0配置GZIP壓縮Vue
- 高效能 gzip 壓縮工具 pgzip
- nginx指定埠開啟gzip壓縮Nginx
- 前端效能優化gzip初探(補充gzip壓縮使用演算法brotli壓縮的相關介紹)前端優化演算法
- Java和.NET的GZIP壓縮功能對比Java
- Android Java壓縮Zlib,Gzip,Zip支援J2MEAndroidJava
- tomcat網頁壓縮配置Tomcat網頁
- HttpGzipModule 網頁壓縮傳輸HTTP網頁
- 關gzip壓縮,我有新發現
- 探索HTTP傳輸中gzip壓縮的祕密HTTP
- 過濾器實現檔案的gzip壓縮過濾器
- SQLServer的頁壓縮SQLServer
- 常用的壓縮解壓縮以及網路通訊命令
- linux 下壓縮與解壓資料夾Linux
- Nginx的gzip壓縮的原理和設定引數Nginx
- Oracle壓縮黑科技(二)—壓縮資料的修改Oracle
- nginx快取配置及開啟gzip壓縮Nginx快取
- 如何透過ZBlogPHP啟用Gzip壓縮?PHP