java断点续传原理总结
断点续传总结
断点续传的原理:
断点续传的原理很简单,就是在HTTP请求上和一般下载有所不同而已,所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给 Web 服务器的时候要多加一条信息 -- 从哪里开始下载。
断点续传的内核:
<!--[if !supportLists]-->1) 1)使用net包中提供下载设置断点续传的开始位置
HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection();
httpConnection.setRequestProperty("RANGE","bytes=2000070");
<!--[if !supportLists]-->2) 2)保存文件采用可保存记录的RandomAccessFile,这样就可以用seek()方法访问记录并读取。
RandomAccess oSavedFile = new RandomAccessFile("down.zip","rw");
long nPos = 2000070;
// 定位文件指针到 nPos 位置
oSavedFile.seek(nPos);
断点续传的实现:
<!--[if !supportLists]-->1) 1)通过远程url和本地保存目录开始运行
<!--[if !supportLists]-->2) 2)通过远程url获取文件大小
<!--[if !supportLists]-->3) 3)通过本地临时文件info和远程文件比较大小判断是否有本地文件下载完毕
<!--[if !supportLists]-->4) 4)未下载完成的开始断点下载
<!--[if !supportLists]-->5) 5)完成后删除临时文件
<!--[if !supportLists]-->6) <!--[endif]-->流程图如下
断点续传注意点:
1)判断是否下载完成,需要首先和临时文件下载到的位置和临时文件下载的总长度对比
2)在已下载的的前提下,下次下载需先读取到下载的位置,从当前位置继续下载
3)在操作数据流的时候,读取完毕记得关闭数据流。连接用完也要关闭,避免线程继续运行,导致操作文件失败的情况。
4)在重命名文件失败的情况,可换另一种方式,先复制出新文件,在删除老文件。
<!--[endif]-->
下一篇: 断点续传原理