Java 实现多线程断点下载原理
2016-10-10 23:53
295 查看
Java 实现多线程断点下载原理
说明:
1.本文是对如何实现多线程断点下载的原理进行简单的分析;2.本文并未附上源代码,因此对其中的一些细节性处理未作详细阐述;
3.www.github.com上的xUtils开源框架中封装的有多线程下载的源代码实现,可自行免费下载.
正文:
多线程下载简单来说就是开启多个线程同时下载同一个文件,每个线程只下载文件的一部分,所有线程都下载成功后即可得到完整的下载文件.
a.简单起见,若开启多条(num)线程同步下载,则可将网络上的源文件等分成num份,每条线程下载其中一份
b.首先获取到网络源文件的大小(size),单位为字节,则每个线程下载的起始和末尾字节数可按如下规则进行设置:
基准 base = size / num 线程 开始位置(startSize) 结束位置(endSize) 线程0 base * 0 ~ base * 1 - 1 线程1 base * 1 ~ base * 2 - 1 线程2 base * 2 ~ base * 3 - 1 . . . . 线程n - 1 base * (n - 1) ~ base * n - 1 线程n base * n ~ base * (n + 1)- 1 . . . . 一般情况,即size不能被num整除,则可使最后一条线程end(第num-1条线程)下载的范围为 线程end base * end ~ size - 1 说明:文件的开始索引是从0开始的,大小为size的文件的结束索引为(size-1),因此线程设置时也从0开始计算第几条线程
c.使用 RandomAccessFile 进行文件的下载操作
RandomAccessFile类的API简介: 此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。 存在指向该隐含数组的光标或索引,称为文件指针; 输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。 如果随机访问文件以读取/写入(rw)模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。 理解:通过RandomAccessFile可改变一个文件指定范围类的字节而不影响该文件的其它字节,及该文件的大小和属性等
d.多线程下载具体实现过程原理分析
1)获取下载文件的大小(size) 2)创建RandomAccessFile类对象,确定下载文件储存路径,文件名,然后指定文件大小为size 3)循环开启num个线程,并根据上面规则设置开始下载位置(startSize)和结束下载位置(endSize) 4)在每个线程中可通过方法 setRequestProperty("Range", "bytes=" + startSize+ "-" + endSize) 向服务器告知当前线程要下载的该文件的开始和结束位置 5)通过RandomAccessFile类对象下载,并将内容写到上面创建的文件对象中
e.断点下载实现过程原理分析
理解:RandomAccessFile可对文件进行指定位置的字节写入而不改变该文件的其它部分, 因此可以记录上次异常终止的位置,然后下次开启时从上次终止的位置下载即可 实现过程: 1)定义一个变量count,初始值为该线程下载的起始位置startSize,然后在下载过程中, 每次将一个byte 数组的字节写入文件后即将count的值加上n;然后将count的值写入一个缓存文件中 2)若程序异常终止,再次开启时,先判断是否存在该线程的count的缓存文件, 若有,先读取缓存文件中的count值,然后从count的位置下载即可
f.细节处理
本文只是对多线程断点下载的实现原理进行简单的分析,对其中一些具体的实现过程和细节,如: 1)下载文件的名字如何实现自动命名(即与服务器上的文件名字一样) 2)下载前判断该文件是否已经下载过 3)下载完成后对缓存文件的处理等 不进行详细分析,感兴趣者可参考xUtils中的源码
g.API需求
1)网络URL及相关联的其它类 2)RandomAccessFile(重点理解该类对文件读写特殊的操作方式)
相关文章推荐
- Android(java)学习笔记215:多线程断点下载的原理(JavaSE实现)
- Android(java)学习笔记216:多线程断点下载的原理(Android实现)
- android(24)(用java实现多线程断点下载)
- 多线程断点下载原理(2) java
- Java 多线程断点下载原理
- JAVA实现多线程断点下载
- Java之多线程断点下载的实现
- Java之多线程断点下载的实现
- OSS实现多文件多线程的断点下载(java)
- java实现多线程断点下载
- 一个根据断点续传原理而实现的多线程下载的程序
- 一个根据断点续传原理而实现的多线程下载的程序
- 使用java实现http多线程断点下载文件(一)
- 使用java实现http多线程断点下载文件(二)
- Java实现多线程断点下载
- Java实现多线程断点下载(下载过程中可以暂停)
- Java实现多线程断点下载(下载过程中可以暂停)
- Java实现多线程断点下载实例代码(下载过程中可以暂停)
- Java 多线程断点下载实现思路
- java多线程断点下载原理(代码实例演示)