OkHttp实现多文件断点下载

今日科技快讯

备受市场关注的顺丰控制控股有限公司借道上市终于尘埃落定,今日鼎泰新材将正式更名为顺丰控股。而顺丰的创始人王卫持股比例高达99.9%,身价已超千亿元,超过此前的圆通老板喻会蛟,成为民营快递行业的首富。

作者简介

终于又到周五了,漫长的一周即将结束,提前祝大家周末愉快!

本篇是 马云飞  第三篇投稿,分享了他是如何使用OkHttp实现多文件断点下载的,希望能够帮助到大家。

马云飞 的博客地址:

http://blog.csdn.net/sw950729

正文

话不多说。这次我主要介绍下okhttp如何实现多文件断点下载。参考文章:

http://blog.csdn.net/KevinsCSDN/article/details/51934274

首先,在这边阐述下我做的过程中所遇到的问题:

  • 如何存储url对应的当前长度以及总长度

  • 如何实现暂停以及续传操作

  • 如何用一个info对象实现多文件的下载

  • response.body.contentlength与实际长度不一样。(例如我获取的长度是5.5M但他的实际长度是6.7M)

如何存储当前长度以及总长度

我在网上看到很多demo对于这块是用 SQLite 实现,我觉得完全可以 Shareperference 来存储,通过 url 来存储对应的 当前长度总长度,有人回说 Shareperference 不是只能一个建对应一个值么,两个怎么解决。我们可以 通过MD5加密的url来存储当前进度通过MD2加密来存储总进度

如何实现暂停以及续传操作

我们可以通过 okhttp 自带的拦截器来实现其效果,具体代码如下:

如何用一个info对象实现多文件的下载

其实在前面我也说了。用 Shareperference 来实现,具体怎么说的。你的url,存储路径每次都是需要传的,但是为了防止进度冲突(例:明明的A的进度,下载B的时候却用的A的进度)。所以通过传入的url来用 Shareperference 得到他存储的 当前长度 与 总长度 来解决。

response.body.contentlength 与实际长度不一样。

其实。。。我也不知道。。百度了好久。得到的答案是在HTTP协议中,消息实体长度和消息实体的传输长度是有区别,比如说gzip压缩下,消息实体长度是压缩前的长度,消息实体的传输长度是gzip压缩后的长度。还有种说法还有种说法是服务器限制问题。不解。总之会导致获取进度的时候,进度值是大于100的。。。

大致的问题和解决方法已经说明了。首先,我们先来看下效果图。

最后上源码,相信你看懂了上面的思路。对于源码的理解就不是很难了:

关于 httpdownloadbean:

就是这几个数据,通过 set 和 get 来设置和获取。

ShareperferenceUtils 是关于 Shareperference 的工具类。filesupport 是用来创建文件的。byteutils 可以不必理会。

更多

每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。

如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。

欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值