Android多线程断点续传下载
原理
其实断点续传的原理很简单,从字面上理解,所谓断点续传就是从停止的地方重新下载。
断点:线程停止的位置。
续传:从停止的位置重新下载。
用代码解析就是:
断点 : 当前线程已经下载完成的数据长度。
续传 : 向服务器请求上次线程停止位置之后的数据。
原理知道了,功能实现起来也简单。每当线程停止时就把已下载的数据长度写入记录文件,当重新下载时,从记录文件读取已经下载了的长度。而这个长度就是所需要的断点。
续传的实现也简单,可以通过设置网络请求参数,请求服务器从指定的位置开始读取数据。
而要实现这两个功能只需要使用到httpURLconnection里面的setRequestProperty方法便可以实现.
public void setRequestProperty(String field, String newValue) |
如下所示,便是向服务器请求500-1000之间的500个byte:
conn.setRequestProperty("Range", "bytes=" + 500 + "-" + 1000); |
以上只是续传的一部分需求,当我们获取到下载数据时,还需要将数据写入文件,而普通发File对象并不提供从指定位置写入数据的功能,这个时候,就需要使用到RandomAccessFile来实现从指定位置给文件写入数据的功能。
public void seek(long offset) |
如下所示,便是从文件的的第100个byte后开始写入数据。
raFile.seek(100); |
而开始写入数据时还需要用到RandomAccessFile里面的另外一个方法
public void write(byte[] buffer, int byteOffset, int byteCount) |
该方法的使用和OutputStream的write的使用一模一样…
以上便是断点续传的原理。