zoukankan      html  css  js  c++  java
  • 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 "";
            }
    
        }
  • 相关阅读:
    4.关于QT中的QFile文件操作,QBuffer,Label上加入QPixmap,QByteArray和QString之间的差别,QTextStream和QDataStream的差别,QT内存映射(
    PlSql加入数据库链接
    UserScan的处理流程分析
    第八十八题(金山笔试题,字符串移动)
    4Sum_leetCode
    LeetCode Add Binary
    Hibernate or JPA Annotation中BLOB、CLOB注解写法
    配置Nginx防止直接用IP訪问Webserver
    Java集合系列之TreeMap源代码分析
    使用Application Loader上传APP流程解读[APP公布]
  • 原文地址:https://www.cnblogs.com/tinyclear/p/6109792.html
Copyright © 2011-2022 走看看