AndroID GZip:
gzip是GNUzip的缩写,它是一个GNU自由软件的文件压缩程序。
http协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。一般服务器中都安装有这个功能模块的,服务器端不需做改动。
当浏览器支持gzip 格式的时候, 服务器端会传输gzip格式的数据。
从http 技术细节上讲,就是 http request 头中 有 "Accept-EnCoding","gzip" ,response 中就有返回头content-encoding=gzip
我们现在从浏览器上访问玩啥网站都是gzip格式传输的。
但是我们现在AndroID 客户端,没有用gzip 格式访问。
同样的的道理,我们可以在androID 客户端 request 头中加入 "Accept-EnCoding","gzip" ,来让服务器传送gzip 数据。
具体代码如下。
private String getJsonStringFromGZIP(httpResponse response) { String JsonString = null; try { inputStream is = response.getEntity().getContent(); BufferedinputStream bis = new BufferedinputStream(is); bis.mark(2); // 取前两个字节 byte[] header = new byte[2]; int result = bis.read(header); // reset输入流到开始位置 bis.reset(); // 判断是否是GZIP格式 int headerData = getShort(header); // Gzip 流 的前两个字节是 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,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); }
参考 ,注意实际使用中,我发现gzip 流前两个字节是0x1e8b ,不是0x1f8b .后来检查一下code ,代码处理错误,加上第二个字节的时候需 &0xFF0x1f8b
可参考标准
http://www.gzip.org/zlib/rfc-gzip.HTML#file-format
http://xmagicj.diandian.com/post/2011-08-08/3641381
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
总结以上是内存溢出为你收集整理的Android GZip的使用-开发中网络请求的压缩实例详解全部内容,希望文章能够帮你解决Android GZip的使用-开发中网络请求的压缩实例详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)