采用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);即可