国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android GZip的使用-開發(fā)中網(wǎng)絡(luò)請求的壓縮實例詳解

2019-12-12 04:42:44
字體:
供稿:網(wǎng)友

Android  GZip:

gzip是GNUzip的縮寫,它是一個GNU自由軟件的文件壓縮程序。

HTTP協(xié)議上的GZIP編碼是一種用來改進WEB應(yīng)用程序性能的技術(shù)。一般服務(wù)器中都安裝有這個功能模塊的,服務(wù)器端不需做改動。

當(dāng)瀏覽器支持gzip 格式的時候, 服務(wù)器端會傳輸gzip格式的數(shù)據(jù)。

從Http 技術(shù)細(xì)節(jié)上講,就是 http request 頭中 有 "Accept-Encoding", "gzip" ,response 中就有返回頭Content-Encoding=gzip

我們現(xiàn)在從瀏覽器上訪問玩啥網(wǎng)站都是gzip格式傳輸?shù)摹?br />

但是我們現(xiàn)在Android 客戶端,沒有用gzip 格式訪問。

同樣的的道理,我們可以在android 客戶端 request 頭中加入 "Accept-Encoding", "gzip" ,來讓服務(wù)器傳送gzip 數(shù)據(jù)。

具體代碼如下。

  private String getJsonStringFromGZIP(HttpResponse response) {    String jsonString = null;    try {      InputStream is = response.getEntity().getContent();      BufferedInputStream bis = new BufferedInputStream(is);      bis.mark(2);      // 取前兩個字節(jié)      byte[] header = new byte[2];      int result = bis.read(header);      // reset輸入流到開始位置      bis.reset();      // 判斷是否是GZIP格式      int headerData = getShort(header);      // Gzip 流 的前兩個字節(jié)是 0x1f8b      if (result != -1 && headerData == 0x1f8b) {        LogUtil.d("HttpTask", " use GZIPInputStream ");        is = new GZIPInputStream(bis);      } else {        LogUtil.d("HttpTask", " not use GZIPInputStream");        is = bis;      }      InputStreamReader reader = new InputStreamReader(is, "utf-8");      char[] data = new char[100];      int readSize;      StringBuffer sb = new StringBuffer();      while ((readSize = reader.read(data)) > 0) {        sb.append(data, 0, readSize);      }      jsonString = sb.toString();      bis.close();      reader.close();    } catch (Exception e) {      LogUtil.e("HttpTask", e.toString(),e);    }     LogUtil.d("HttpTask", "getJsonStringFromGZIP net output : " + jsonString );    return jsonString;  }   private int getShort(byte[] data) {    return (int)((data[0]<<8) | data[1]&0xFF);  }

參考 ,注意實際使用中,我發(fā)現(xiàn)gzip 流前兩個字節(jié)是0x1e8b ,不是0x1f8b .后來檢查一下code ,代碼處理錯誤,加上第二個字節(jié)的時候需 &0xFF0x1f8b

可參考標(biāo)準(zhǔn)

http://www.gzip.org/zlib/rfc-gzip.html#file-format
http://xmagicj.diandian.com/post/2011-08-08/3641381

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 桓台县| 日土县| 濉溪县| 旺苍县| 宜兰市| 昌都县| 南雄市| 丰台区| 同心县| 黄浦区| 花垣县| 乌鲁木齐县| 页游| 中阳县| 五寨县| 阿拉善左旗| 探索| 汝州市| 通城县| 会东县| 定结县| 宁远县| 纳雍县| 陆川县| 吴旗县| 平武县| 澜沧| 宣威市| 芷江| 阜平县| 麻阳| 慈利县| 乌兰县| 湘阴县| 托克托县| 永昌县| 桂东县| 浑源县| 梁河县| 盐山县| 临潭县|