HTTP的多线程下载

多线程下载是加快下载速度的一种方式,通过开启多个线程去执行一个任务,可以使任务的执行速度变快。多线程的任务下载时常都会使用得到断点续传下载,就是我们在一次下载未结束时退出下载,第二次下载时会接着第一次下载的进度继续下载。

一、 多线程下载的步骤说明:

第一步: 我们要获得下载资源的的长度,用http请求中HttpURLConnection的getContentLength()方法
第二步:在本地创建一个文件,设计其长度。File file = new File()
第三步:根据文件长度和线程数计算每条线程下载的数据长度和下载位置。
第四步:从下载的位置下载数据,通过connection.setRequestProperty("Range", "bytes=" + start + "-" +end)方法;
第五步:保存文件,使用RandomAccessFile类指定每条线程从本地文件的什么位置开始写入数据。


【HTTP的多线程下载】二、根据文件长度和线程数计算每条线程下载的数据长度和下载位置

如:文件的长度为6M,线程数为3,那么,每条线程下载的数据长度为2M,每条线程开始下载的位置如下图所示。


HTTP的多线程下载
文章图片


例如10M大小,使用3个线程来下载,

线程下载的数据长度(10%3 == 0 ? 10/3:10/3+1) ,第1,2个线程下载长度是4M,第三个线程下载长度为2M
下载开始位置:线程id*每条线程下载的数据长度 = ?
下载结束位置:(线程id+1)*每条线程下载的数据长度-1=?


android中多线程中的原理说明

对于多线程的下载,有两个需要学习的知识点就是
1.connection.setRequestProperty("Range", "bytes=" + start + "-" + end)方法,它用于请求指定范围内的数据。
2.RandomAccessFile类的seek方法从指定位置开始写入数据到文件:

    推荐阅读