Volley 請(qǐng)求/接收內(nèi)容 GZIP壓縮

往后臺(tái)傳輸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");//客戶端發(fā)送GZIP內(nèi)容
        headers.put("Content-Type", "application/json");//根據(jù)后臺(tái)要求,覺得Content-Type類型
        return headers;
    }

    @Override
    public RetryPolicy getRetryPolicy() {
        return new DefaultRetryPolicy();
        //setRetryPolicy(RetryPolicy policy);可自定義超時(shí)時(shí)間,重試次數(shù)等參數(shù)
    }

    @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);
    }

}

以上,有幫助到你的話隨手點(diǎn)個(gè)贊^^

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容