下载文件(三)java多线程下载大文件

一、先看效果:

1、普通链接:

(1)大文件单线程下载:

String dir = "D:/test";
String fileURL = "https://download.jetbrains.8686c.com/idea/ideaIU-2020.3.dmg";
Downloader downloader = new FileDownloader();
downloader.download(fileURL, dir);
0 文件总大小: 838145KB, 已下载:0KB, 下载速度:0KB
0 文件总大小: 838145KB, 已下载:793KB, 下载速度:812KB
0 文件总大小: 838145KB, 已下载:1620KB, 下载速度:846KB
0 文件总大小: 838145KB, 已下载:2452KB, 下载速度:851KB
0 文件总大小: 838145KB, 已下载:3283KB, 下载速度:851KB
0 文件总大小: 838145KB, 已下载:4122KB, 下载速度:858KB
0 文件总大小: 838145KB, 已下载:4938KB, 下载速度:835KB
0 文件总大小: 838145KB, 已下载:5777KB, 下载速度:859KB
0 文件总大小: 838145KB, 已下载:6618KB, 下载速度:860KB
0 文件总大小: 838145KB, 已下载:7442KB, 下载速度:843KB
0 文件总大小: 838145KB, 已下载:8280KB, 下载速度:858KB
0 文件总大小: 838145KB, 已下载:9097KB, 下载速度:836KB
0 文件总大小: 838145KB, 已下载:9886KB, 下载速度:808KB
//此处省略部分日志
0 文件总大小: 838145KB, 已下载:328776KB, 下载速度:845KB
0 文件总大小: 838145KB, 已下载:329592KB, 下载速度:835KB
0 文件总大小: 838145KB, 已下载:834530KB, 下载速度:790KB
0 文件总大小: 838145KB, 已下载:835346KB, 下载速度:835KB
0 文件总大小: 838145KB, 已下载:836162KB, 下载速度:835KB
0 文件总大小: 838145KB, 已下载:837005KB, 下载速度:862KB
0 文件总大小: 838145KB, 已下载:837834KB, 下载速度:849KB
总共下载文件耗时:1039s

(2) 大文件多线程下载:

String dir = "D:/test";
String fileURL = "https://download.jetbrains.8686c.com/idea/ideaIU-2020.3.dmg";
Downloader downloader = new MultiThreadFileDownloader(100);
downloader.download(fileURL, dir);

2 文件总大小: 8381KB, 已下载:39KB, 下载速度:40KB
0 文件总大小: 8381KB, 已下载:21KB, 下载速度:21KB
1 文件总大小: 8381KB, 已下载:0KB, 下载速度:0KB
3 文件总大小: 8381KB, 已下载:2KB, 下载速度:2KB
7 文件总大小: 8381KB, 已下载:0KB, 下载速度:0KB
77 文件总大小: 8381KB, 已下载:30KB, 下载速度:31KB
10 文件总大小: 8381KB, 已下载:30KB, 下载速度:31KB
2 文件总大小: 8381KB, 已下载:164KB, 下载速度:127KB
7 文件总大小: 8381KB, 已下载:82KB, 下载速度:83KB
3 文件总大小: 8381KB, 已下载:72KB, 下载速度:71KB
0 文件总大小: 8381KB, 已下载:197KB, 下载速度:180KB
1 文件总大小: 8381KB, 已下载:69KB, 下载速度:70KB
77 文件总大小: 8381KB, 已下载:70KB, 下载速度:40KB
10 文件总大小: 8381KB, 已下载:67KB, 下载速度:37KB
//此处省略部分日志
68 文件总大小: 8381KB, 已下载:8381KB, 下载速度:8582KB
54 文件总大小: 8381KB, 已下载:8381KB, 下载速度:8582KB
58 文件总大小: 8381KB, 已下载:8381KB, 下载速度:8582KB
70 文件总大小: 8381KB, 已下载:8381KB, 下载速度:8582KB
41 文件总大小: 8381KB, 已下载:8381KB, 下载速度:8582KB
72 文件总大小: 8381KB, 已下载:8381KB, 下载速度:8582KB
总共下载文件耗时:348s

执行完后查看目标文件夹: 

可以正常打开:

对比单线程,在线程数为100的情况下,速度只提升了3倍左右。这是因为idea的下载服务器没有限速,多线程速度的提升仅仅是在充分的压榨本地的带宽,所以提升的幅度不大。

2、云盘链接:云盘对单个线程的下载速度做了限制,现在使用云盘的下载链接来测试多线程和单线程的下载速度,效果会更明显。

二、关键词:

1、HTTP协议Range请求头:获取部分资源的范围请求,通过指定Range即可告知服务器资源的指定范围。格式: Range: bytes=start-end,如

获取字节范围 5001-10000

Range: bytes=5001-10000

也可以指定开始位置不指定结束位置,表示获取开始位置之后的全部数据

Range: bytes=5001-

 服务器接收到带有Range的请求,会在处理请求之后返回状态码为206 Partial Content的响应。

基于Range的特性,可以实现文件的多线程下载,文件的断点续传。

2、RestTemplate:这里请求使用的是SpringMVC中的RestTemplate

(1)对于Https,需要设置RestTemplate绕过证书验证。

三、代码:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值