官方给出的例子是采用拦截器的方式来是实现GZIP压缩。

/**拦截器压缩http请求体,许多服务器无法解析*/staticclassGzipRequestInterceptorimplementsInterceptor{@OverridepublicResponseintercept(Chainchain)throwsIOException{RequestoriginalRequest=chain.request();if(originalRequest.body()==null||originalRequest.header("Content-Encoding")!=null){returnchain.proceed(originalRequest);}RequestcompressedRequest=originalRequest.newBuilder().header("Content-Encoding","gzip").method(originalRequest.method(),gzip(originalRequest.body())).build();returnchain.proceed(compressedRequest);}privateRequestBodygzip(finalRequestBodybody){returnnewRequestBody(){@OverridepublicMediaTypecontentType(){returnbody.contentType();}@OverridepubliclongcontentLength(){return-1;//无法知道压缩后的数据大小}@OverridepublicvoidwriteTo(BufferedSinksink)throwsIOException{BufferedSinkgzipSink=Okio.buffer(newGzipSink(sink));body.writeTo(gzipSink);gzipSink.close();}};}}


源码地址