生活中,有许多事物,在没有被揭开面纱之前,我们往往会觉得很神秘很高深,认为它一定很难,进而望而却步,失去了解它的机会。然而,很多事,只要我们自己能沉下心来,细细研究,那些神秘高深的,也会变得简单明了。”HTTP文件断点续传”就是这样一个好例子,深入了解背后之理,“HTTP文件断点续传原理”其实很简单。
一、什么是断点续传
1.定义:
可以从下载或上传断开点继续开始传输,就叫断点续传。
2.核心实现原理:
i.RandomAccessFile(文件任意位置保存)
方法seek():可以移动到保存文件任意位置,在该位置发生下一个读取或写入操作
ii.HttpURLConnection.setRequestProperty()(任意位置请求返回剩余文件)
HttpURLConnection.setRequestProperty(“Range”, “bytes=” + start + “-“ + end)
二、实例分析
流程图
实现步骤
- 1.建立数据库:保存文件下载信息
- 2.下载服务类(DownloadService)
- 3.两个线程:文件信息线程(FileInfoThread)和文件下载线程(DownloadThread)
- 4.广播(BroadcastReceiver):UI进度更新
1.建立数据库
按常规数据库建立方法,具体(略)。数据保存信息为:
2.下载服务类
利用service多次启动只调用onStartCommand()方法,处理开始或暂停下载逻辑。
|
|
3.两个线程
i.文件信息线程(FileInfoThread)
通过网络获取下载文件大小,并建立对应大小的保存文件路径。
ii.文件下载线程(DownloadThread)
断点续传原理核心类。
1.判断下载进度是否有保存,若无,数据插入一条数据。
2.设置网络请求Range参数,从请求位置返回数据
3.通过RandomAccessFile从进度保存位置保存文件
4.用户暂停时,保存下载进度
4.广播(BroadcastReceiver):
每秒广播一次,刷新UI
DownloadThread类源码:
三、源码地址
如果你觉得还不错,欢迎star或fork。
https://github.com/awenzeng/BreakPointDemo