• Android获取网络数据进行GZIP解压


    说明:现在很多网站都会在回传数据的时候进行GZIP压缩,我们可以在请求头中申明支持GZIP压缩。可以减轻网络传输压力,Xutils中已经实现。

    下面是一个DEMO,便于理解。

    private void initGzip() {
            findViewById(R.id.btn1).setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    new Thread(new Runnable() {
    
                        @Override
                        public void run() {
    
                            try {
                                boolean isGzip = false;
    
                                // 初始化httpClient对象
                                DefaultHttpClient httpClient = new DefaultHttpClient();
    
                                // 初始化httpGe对象
                                HttpGet get = new HttpGet("http://mobileif.maizuo.com/city");
                                // 1.发送请求头:`Accept-Encoding:gzip`
                                get.addHeader("Accept-Encoding", "gzip");
    
                                // HttpGet get = new HttpGet("http://httpbin.org/gzip");
    
                                // 发起请求
                                HttpResponse response = httpClient.execute(get);
                                if (response.getStatusLine().getStatusCode() == 200) {
                                    // 2. 取的响应头`Content-Encoding`,判断是否包含Content-Encoding:gzip
                                    Header[] headers = response.getHeaders("Content-Encoding");
                                    for (Header header : headers) {
                                        String value = header.getValue();
                                        if (value.equals("gzip")) {
                                            isGzip = true;
                                        }
                                    }
    
                                    // 3.相应的解压
                                    String result;
                                    HttpEntity entity = response.getEntity();
                                    if (isGzip) {// gzip解压
                                        InputStream in = entity.getContent();
    
                                        GZIPInputStream gzipIn = new GZIPInputStream(in);
    
                                        // inputStream-->string
                                        result = convertStreamToString(gzipIn);
                                    } else {// 标准解压
    
                                        // 打印响应结果
                                        result = EntityUtils.toString(entity);
                                    }
                                    System.out.println("result:" + result);
                                }
    
                            } catch (ClientProtocolException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
    
                        }
                    }).start();
                }
            });
    
        }
    
        public static String convertStreamToString(InputStream is) throws IOException {
            try {
                if (is != null) {
                    StringBuilder sb = new StringBuilder();
                    String line;
                    try {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"));
                        // BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                        while ((line = reader.readLine()) != null) {
                            // sb.append(line);
                            sb.append(line).append("
    ");
                        }
                    } finally {
                        is.close();
                    }
                    return sb.toString();
                } else {
                    return "";
                }
            } catch (Exception e) {
                e.printStackTrace();
                return "";
            }
    
        }
  • 相关阅读:
    JS URL传中文参数引发的乱码问题
    git (转载)
    php webservice
    php date之间的相互转换
    在图片上加字符-base64转图片-图片转base64
    转:微软面试一百题
    2014-8-17 note
    some base knowledge
    introduction
    Centos6.6 编译安装nginx
  • 原文地址:https://www.cnblogs.com/tinyclear/p/6109792.html
Copyright © 2020-2023  润新知