采用gzip传输好处不言而喻。通过volley得到响应字节流后判断是否经过gzip压缩并进行相应处理。
一般常用自定义request用法:
在parseNetworkResponse一般这样获取响应字符串:
String json = new String( response.data, HttpHeaderParser.parseCharset(response.headers));
进行gzip压缩后,需这样处理:
private int getShort(byte[] data) { return (int) ((data[0] << 8) | data[1] & 0xFF); } private String getRealString(byte[] data) { byte[] h = new byte[2]; h[0] = (data)[0]; h[1] = (data)[1]; int head = getShort(h); boolean t = head == 0x1f8b; InputStream in; StringBuilder sb = new StringBuilder(); try { ByteArrayInputStream bis = new ByteArrayInputStream(data); if (t) { in = new GZIPInputStream(bis); } else { in = bis; } BufferedReader r = new BufferedReader(new InputStreamReader(in), 1000); for (String line = r.readLine(); line != null; line = r.readLine()) { sb.append(line); } in.close(); } catch (Exception e) { e.printStackTrace(); } return sb.toString(); }
在parseNetworkResponse中String jsonString = getRealString(response.data);即可