1.多线程下载:
首先通过下载总线程数来划分文件的下载区域:利用int range = fileSize / threadCount;得到每一段下载量;每一段的位置是i * range到(i + 1) * rang - 1,注意最后一段的位置是到filesize - 1;
通过Http协议的Range字段实现下载文件的分段;
通过Java类RandomAccessFile可以实现文件的随机访问,利用seek方法定位的文件的指定位置;
由HttpUrlConnection获取流来进行流的读写,实现文件的存储;
在下载过程中利用Handler来向外传递下载的信息。
2.断点续传:
对于每一个线程利用一个DownloadInfo类来保存下载的信息,每次在下载过程中向数据库更新信息(我也有想过只在下载暂停时进行更新,但那样的话我们的进程被杀掉时信息就无法保存下来)。在进行下载之前去访问数据库是否有记录存在,如果没有执行第一次下载的初始化,如果存在记录但下载文件不存在时,删掉数据库中的记录之后进行第一次下载的初始化,如果有记录且文件存在,则从数据库中取出信息。
实现的效果如图,自己封装的类提供了开始,暂停,删除,以及重新下载的方法。
1