| package com.doumee.lib_coremodel.http.interceptor; | 
|   | 
| import java.io.IOException; | 
|   | 
|   | 
| import okhttp3.MediaType; | 
| import okhttp3.ResponseBody; | 
| import okio.Buffer; | 
| import okio.BufferedSource; | 
| import okio.ForwardingSource; | 
| import okio.Okio; | 
| import okio.Source; | 
|   | 
| /** | 
|  * Created by goldze on 2017/5/11. | 
|  */ | 
|   | 
| public class ProgressResponseBody extends ResponseBody { | 
|     private ResponseBody responseBody; | 
|   | 
|     private BufferedSource bufferedSource; | 
|     private String tag; | 
|   | 
|     public ProgressResponseBody(ResponseBody responseBody) { | 
|         this.responseBody = responseBody; | 
|     } | 
|   | 
|     public ProgressResponseBody(ResponseBody responseBody, String tag) { | 
|         this.responseBody = responseBody; | 
|         this.tag = tag; | 
|     } | 
|   | 
|     @Override | 
|     public MediaType contentType() { | 
|         return responseBody.contentType(); | 
|     } | 
|   | 
|     @Override | 
|     public long contentLength() { | 
|         return responseBody.contentLength(); | 
|     } | 
|   | 
|     @Override | 
|     public BufferedSource source() { | 
|         if (bufferedSource == null) { | 
|             bufferedSource = Okio.buffer(source(responseBody.source())); | 
|         } | 
|         return bufferedSource; | 
|     } | 
|   | 
|     private Source source(Source source) { | 
|         return new ForwardingSource(source) { | 
|             long bytesReaded = 0; | 
|   | 
|             @Override | 
|             public long read(Buffer sink, long byteCount) throws IOException { | 
|                 long bytesRead = super.read(sink, byteCount); | 
|                 bytesReaded += bytesRead == -1 ? 0 : bytesRead; | 
|                 //使用RxBus的方式,实时发送当前已读取(上传/下载)的字节数据 | 
|                 //TODO 实时发送当前已读取(上传/下载)的字节数据 | 
|                 //RxBus.getDefault().post(new DownLoadStateBean(contentLength(), bytesReaded, tag)); | 
|                 return bytesRead; | 
|             } | 
|         }; | 
|     } | 
| } |