OKHTTP缓存问题记录

使用okhttp的缓存功能

okhttp有一个功能就是适配http协议里面cache-control头

但是在实际使用的过程中,发现非文本内容,如果不对Response中的inputstream读取,就不会缓存下来

比如使用如下代码读取后才能缓存到cache目录

                ResponseBody body = response.body();
                if (body != null && response.isSuccessful()) {
                    long totalLength = body.contentLength();
                    BufferedInputStream bin = new BufferedInputStream(body.byteStream());
                    int size = 0;
                    int len = 0;
                    int percent = 0;
                    byte[] buf = new byte[1024];
                    while ((size = bin.read(buf)) != -1) {
                        len += size;
                        if (totalLength > 0) {
                            int temp = (int) (((float) len / (float) totalLength) * 10);
                            if (percent != temp) {
                                percent = temp;
                                TLog.d(TAG, "downloading---->" + percent);
                            }
                        }
                    }
                    try {
                        bin.close();
                    } catch (Exception e) {
                        TLog.e(TAG, e);
                    }

                }

分析了一下源码,记录一下原因

主要是CacheInterceptor中intercept方法

133行附近有一个cache.put方法

 cache.put返回的是cacheRequset

从Cache.kt文件中可以找到

 返回的是RealCacheRequest

 然后就是cache.put下面的

cacheWritingResponse

 最后

 这里解释了为什么要读流的时候才会写入缓存了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值