使用多线程下载文件可以很快地完成文件的下载,比如迅雷就是采用了多线程的方式来实现快速下载的。之所以采用多线程的形式会加快下载速度,是因为客户端启动多个线程进行下载时服务器就会为该客户端提供相应的服务,自然客户端就拥有了较快的下载速度。实际上并不是客户端并发的下载线程越多,程序下载速度就越快,,因为当客户端开启太多的并发线程之后,应用程序需要维护每条线程的开销,线程同步的开销,这些开销反而会导致下载速度降低。 在本小节中我们学习如何使用HttpURLConnection实现多线程下载,HttpURLConnection是URLConnection的子类。相对于URLConnection,它增加了一些用于操作HTTP资源的便捷方法,利用它可以向指定网站发送GET请求或POST请求。常用的HttpURLConnection类的方法有:
-
int getResponseCode() 获取服务器的响应代码
-
String getResponseMessage() 获取服务器的响应消息
-
String getRequestMethod() 获取发送请求的方法
-
void setRequestMethod(String method) 设置发送请求的方法
实现多线程下载的步骤:
-
创建URL对象;
-
利用HttpURLConnection类获取指定URL对象所指向资源的大小
-
在本地磁盘上创建一个与网络资源相同大小的空文件
-
计算第条线程应该下载网络资源的哪个部分(从哪个字节开始,到哪个字节结束)
-
依次创建、启动多条线程来下载网络资源的指定部分
第一步:创建一个Java项目,然后在其中创建一个名为DownLoaderTest.java的类,代码如下:
public class DownLoaderTest {
public static void main(String[] args) throws Exception{
String path = "http://jywt2.newhua.com/down/CPUCOOL9.zip";//下载一个压缩包
path ="http://wbsoft.wn51.com/wnwb_782_11.exe";//下载万能五笔
new DownLoaderTest().download(path);
}
// Http协议,从Internet上请求资源,并保存下来,实现断点下载
public void download(String path) throws Exception {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();//支持 HTTP 特定功能的 URLConnection
// 设置连接超时
conn.setConnectTimeout(6000);
conn.setRequestMethod("GET");
int filesize = conn.getContentLength();//获取要下载的文件的大小
//假设在程序中采用3条线程来下载数据
int threadSize =3;
//每条线程要下载的文件大小,即分给每条线程的文件长度
int block = filesize/3+1;
conn.disconnect();//关闭连接
String houzhui =path.substring(path.lastIndexOf('.'));
System.out.println(houzhui);
File file = new File("fileName"+houzhui);
for(int i=0 ; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?