Android解凍GZIP形式のWebデータ

2851 ワード

GZIPの有効化:
GZIP通信を有効にするには、サーバとクライアントの両方のサポートが必要であり、サーバ側ではGZIPオプションを開く必要があります(詳しくはWIN 2003でIISがGZIPを開く方法を参照).これにより、サーバの負担が増加します.
サーバーがあなたが設置していない場合は、気にしないでください.
クライアント側では、HTTPリクエストを行う場合、HTTPのヘッダに次のように追加します.

    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;  
    }  

コードは簡単ですが、GZIPの効果は侮れません.一般的なウェブページにとって、圧縮されたデータは一般的に1/2~2/3であり、微博、フォーラムなどの冗長性の高いAPIデータに対しては、1/4の効果を達成することができる.これは省流量にとって非常に大きい.