JAVA下实现多线程断点下载

JAVA下实现多线程断点下载

多线程断点下载:顾名思义是用多线程实现的,断点是当第三方因素(断电、断网等)中断下载时,下次下载可以继续上次下载的地方下载。

 

1、通过getContentLength可以获取要下载文件的大小,这样可以在本机上创建一个相同大小的文件用来下载。

int fileLength = connection.getContentLength();

2、由于是多线程,所以要给每一个线程均分分配要下载的位置。

复制代码

for(int i = 0; i < threadCount; i ++) {
    int startThread = i * blockSize;
    int endThread = (i + 1) * blockSize - 1;
    if( i == blockSize - 1) endThread = fileLength -1;
    new DownloadThread(i, startThread, endThread).start();
                    
}

复制代码

3、启动每个线程下载时,请求头需要Range参数,值是bytes:xxx-xxx某事。比如"Range:0-10100",代表要下载的位置是从0到10100。

connection.setRequestProperty("Range", "bytes:"+startThred+"-" + endThread);

4、然后每次用RandomAccessFile写入数据到本机文件里。

while((length = inputStream.read(buffer)) != -1) {
    randomAccessFile.write(buffer, 0, length);
}

 

5、当然每次下载时需要记录本线程下载了多少,以便断点时,下载的时候可以从下次下载的地方下载。

total += length;
int currentThreadPostion = startThred + total;
RandomAccessFile randomAccessFile2 = new RandomAccessFile(file, "rwd");
randomAccessFile2.write(String.valueOf(currentThreadPostion).getBytes());
randomAccessFile2.close();

 

继承Thread类的DownloadThread类代码:

 View Code

 

完整代码:

 View Code

 

分类: JAVA,Android

好文要顶 关注我 收藏该文  

starry_sky
关注 - 11
粉丝 - 18

+加关注

0

« 上一篇:AtCoder Beginner Contest 071 ABCD
» 下一篇:HDU 6170Two strings

posted @ 2017-08-20 22:23 starry_sky 阅读(4324) 评论(12) 编辑 收藏

 

评论列表

  

#1楼 2017-08-24 22:35 Angel_Kitty  

dalao好强啊,多线程都如此精通,还会Android开发,我面向对象都不会,可能是因为我没有对象吧QAQ

支持(0)反对(0)

  

#2楼[楼主] 2017-08-24 22:39 starry_sky  

@ Angel_Kitty
我也是跟着视频敲的0.0 
没对象那我帮你 new 一个对象 
对象 Angel_Kitty = new 对象();

支持(0)反对(0)

  

#3楼 2017-08-24 22:40 Angel_Kitty  

@ starry_sky
我竟无言以对,厉害了,哈哈哈哈哈

支持(0)反对(0)

  

#4楼 2018-03-01 22:33 yujungongwu  

bytes后面是=吧,使用:响应码200

支持(0)反对(0)

  

#5楼[楼主] 2018-03-01 23:10 starry_sky  

@ yujungongwu
刚试了下,“=”也可以,不过“:”也是可以的。
code==200才开始下载,毕竟代表请求全部资源成功,之前调式写成206没改回来,谢谢提醒!

支持(0)反对(0)

  

#6楼 2018-04-07 16:53 phil_jing  

RandomAccessFile不需要关闭吗

支持(0)反对(0)

  

#7楼[楼主] 2018-04-07 17:13 starry_sky  

@ phil_jing
enenen~ 我关了呀
你再仔细看看

支持(0)反对(0)

  

#8楼 2018-04-08 21:45 phil_jing  

@ starry_sky
抱歉,我看错了;那如何多线程下载流呢,具体场景是下载导出的Excel,现在是文件越来愈大,极大影响效率

支持(0)反对(0)

  

#9楼[楼主] 2018-04-08 21:56 starry_sky  

@ phil_jing
是指下载的文件是Excel文件,但文件大小很大吗?
文件很大的话,等下载下来就好好久,可以尝试边下载边访问数据。
不过这个还没有写过,可以尝试下。

支持(0)反对(0)

  

#10楼[楼主] 2018-04-08 22:01 starry_sky  

@ phil_jing
知识有限,只想到这个,原谅我的无知。

支持(0)反对(0)

  

#11楼 2018-04-08 22:06 phil_jing  

@ starry_sky
目前我没想到特别好的方法,只能将就。。。。

支持(0)反对(0)

  

#12楼[楼主] 2018-04-08 22:09 starry_sky  

@ phil_jing
(ง •̀_•́)ง会想到的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值