Android解凍GZIP形式のWebデータ
GZIPの有効化:
GZIP通信を有効にするには、サーバとクライアントの両方のサポートが必要であり、サーバ側ではGZIPオプションを開く必要があります(詳しくはWIN 2003でIISがGZIPを開く方法を参照).これにより、サーバの負担が増加します.
サーバーがあなたが設置していない場合は、気にしないでください.
クライアント側では、HTTPリクエストを行う場合、HTTPのヘッダに次のように追加します.
サーバがサポートしている場合は、パケットを返すヘッダに次の内容が含まれます.
解凍GZIP:
次に,コードを用いてGZIPを解凍する方法を示し,get法を用いてネットワーク上のデータを取得し,取得後GZIPinputStreamクラスを用いてGZIPデータを解凍した.得られた文字列を返します.
コードは簡単ですが、GZIPの効果は侮れません.一般的なウェブページにとって、圧縮されたデータは一般的に1/2~2/3であり、微博、フォーラムなどの冗長性の高いAPIデータに対しては、1/4の効果を達成することができる.これは省流量にとって非常に大きい.
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の効果を達成することができる.これは省流量にとって非常に大きい.