为了账号安全,请及时绑定邮箱和手机立即绑定

Volley 请求/接收内容 GZIP压缩

标签:
Java

往后台传输json字符串为例,其他类型同样做法

自定义Request继承Volley自带的StringRequest

GzipRequest.java

public class GzipRequest extends StringRequest {    private String mData = null;    public GzipRequest(String url, Response.Listener<String> listener, @Nullable Response.ErrorListener errorListener) {        super(url, listener, errorListener);
    }    public GzipRequest(String url,String data, Response.Listener<String> listener, @Nullable Response.ErrorListener errorListener) {        super(Method.POST,url, listener, errorListener);
        mData = data;
    }    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String,String> headers = new HashMap<String, String>(); 
        headers.put("Charset", "UTF-8");
        headers.put("Accept-Encoding", "gzip,deflate");//客户端允许接收GZIP
        headers.put("Content-Encoding", "gzip");//客户端发送GZIP内容
        headers.put("Content-Type", "application/json");//根据后台要求,觉得Content-Type类型
        return headers;
    }    @Override
    public RetryPolicy getRetryPolicy() {        return new DefaultRetryPolicy();        //setRetryPolicy(RetryPolicy policy);可自定义超时时间,重试次数等参数
    }    @Override
    public byte[] getBody() throws AuthFailureError {        return mData == null ? super.getBody() : compress(mData);
    }    @Override
    protected Response<String> parseNetworkResponse(NetworkResponse response) {
        String result = uncompress(response.data);        return Response.success(result, HttpHeaderParser.parseCacheHeaders(response));        //return super.parseNetworkResponse(response);
    }    @Override
    protected void deliverResponse(String response) {

    }    private byte[] compress(String str) {        try (ByteArrayOutputStream outStream = new ByteArrayOutputStream()) {            try (GZIPOutputStream gzip = new GZIPOutputStream(outStream)) {
                gzip.write(str.getBytes(StandardCharsets.UTF_8));
            }            return out.toByteArray();
        }catch (Exception E){            return new byte[0];
        }
    }    private String uncompress(byte[] str){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();        try (GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(str))) {            int b;            while ((b = gis.read()) != -1) {
                baos.write((byte) b);
            }
        }catch (Exception e){            return "";
        }        return new String(baos.toByteArray(), StandardCharsets.UTF_8);
    }

}

以上,有帮助到你的话随手点个赞^^



作者:考特林
链接:https://www.jianshu.com/p/2bd2d3fca8bd


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
229
获赞与收藏
1001

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消