您当前的位置: 首页 > 

梁云亮

暂无认证

  • 2浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

多线程下载

梁云亮 发布时间:2019-10-21 23:27:48 ,浏览量:2

多线程下载

使用多线程下载文件可以很快地完成文件的下载,比如迅雷就是采用了多线程的方式来实现快速下载的。之所以采用多线程的形式会加快下载速度,是因为客户端启动多个线程进行下载时服务器就会为该客户端提供相应的服务,自然客户端就拥有了较快的下载速度。实际上并不是客户端并发的下载线程越多,程序下载速度就越快,,因为当客户端开启太多的并发线程之后,应用程序需要维护每条线程的开销,线程同步的开销,这些开销反而会导致下载速度降低。 在本小节中我们学习如何使用HttpURLConnection实现多线程下载,HttpURLConnection是URLConnection的子类。相对于URLConnection,它增加了一些用于操作HTTP资源的便捷方法,利用它可以向指定网站发送GET请求或POST请求。常用的HttpURLConnection类的方法有:

  • int getResponseCode() 获取服务器的响应代码

  • String getResponseMessage() 获取服务器的响应消息

  • String getRequestMethod() 获取发送请求的方法

  • void setRequestMethod(String method) 设置发送请求的方法

    实现多线程下载的步骤:

  • 创建URL对象;

  • 利用HttpURLConnection类获取指定URL对象所指向资源的大小

  • 在本地磁盘上创建一个与网络资源相同大小的空文件

  • 计算第条线程应该下载网络资源的哪个部分(从哪个字节开始,到哪个字节结束)

  • 依次创建、启动多条线程来下载网络资源的指定部分

示例:使用HttpURLConnection实现多线程下载。

第一步:创建一个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            
关注
打赏
1665409997
查看更多评论
0.0466s