多线程断点下载原理

多线程下载的原理:

HTTP协议的请求头中有一个Range字段, 通过这该参数可以告诉服务器, 只给我目标资源的部分数据;
客户端通过多线程分别向服务端请求目标资源的如原理图1,2,3号线程所获取的资源一样, 将每个线程说获取到的资源放到一个文件里面, 就组成了一个完整的目标资源.

需要知道:

  1. Range
    Range头指示服务器只传输目标资源指定的一部分数据,可以用来实现断点续传/多线程下载. 它有三种格式:
    Range: bytes=1000-2000 (传输目标资源的1000-2000部分的数据)
    Range: bytes=1000- (传输目标资源第1000byte以后的所有数据)
    Range: bytes=1000 (只传输目标资源的最后1000byte数据)
    对Range的响应:
    Accept-Ranges: 能查看服务器是否支持Range;
    支持:bytes
    不支持:none
    Content-Range:1000-3000/5000 (返回服务端目标资源数据的范围:start-end/total)
  2. RandomAccessFile
    对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。

每个线程分配数据的算法:

断点就是记录下, 已经被写入的位置, 当下次再次下载时, 从上次写入的地方开始继续写!

注:文章中可能有很多错误,也有可能出现无法使用的情况,因为此技术博文是我的学习笔记,我只是记载一些看到或者想到东西,所以我不推荐你来按照该博文的内容进行直接使用。谢谢~~