HTTP的多线程下载

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

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

第一步: 我们要获得下载资源的的长度,用http请求中HttpURLConnection的getContentLength()方法

第二步:在本地创建一个文件,设计其长度。File file = new File()

第三步:根据文件长度和线程数计算每条线程下载的数据长度和下载位置。

第四步:从下载的位置下载数据,通过connection.setRequestProperty(“Range”, “bytes=” + start + “-” +end)方法;

第五步:保存文件,使用RandomAccessFile类指定每条线程从本地文件的什么位置开始写入数据。


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

如:文件的长度为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方法从指定位置开始写入数据到文件:

    原文作者:sys1211
    原文地址: https://www.jianshu.com/p/524603999bd6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞