`
easyhaohao
  • 浏览: 13517 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

http多线程下载

阅读更多
public class MultiThreadDownloadTest {
	
	public static void main(String[] args) throws Exception
	{
		String urlStr = "http://wwww.153.xdowns.com/uploadFile/2011-5/360duTMShutdown.zip";
		URL url = new URL(urlStr);
		URLConnection con = url.openConnection();
		int contentLen = con.getContentLength();
		
		
		int threadCount = 2;
		int subLen = contentLen / threadCount;
		int remainder = contentLen % threadCount;

		File destFile = new File("d:\\1.rar");
		
		for(int i = 0;i<threadCount;i++)
		{
			int start = subLen * i;
			int end = start + subLen - 1;
			
			if(i==threadCount - 1)
			{
				end += remainder;
			}
			Thread t = new Thread(new DownloadRunnable(start, end, url, destFile));
			t.start();
		}
	}
}

class DownloadRunnable implements Runnable{
	
	private  int start;
	
	private int end;
	
	private URL srcURL;
	
	private File destFile;
	
	private static final int BUFFER_SIZE = 8192;

	
	public DownloadRunnable(int start,int end,URL srcURL,File destFile)
	{
		this.start = start;
		this.end = end;
		this.srcURL = srcURL;
		this.destFile = destFile;
	}
	
	@Override
	public void run() 
	{
		System.out.println(Thread.currentThread().getName()+ " 启动.....");
		BufferedInputStream bis = null;
		RandomAccessFile rf = null;
		
		byte[] buf = new byte[BUFFER_SIZE];
		
		URLConnection con = null;
		
		try{
			con = srcURL.openConnection();
			con.setRequestProperty("range", "bytes="+start + "-" + end);
			bis = new BufferedInputStream(con.getInputStream());
			
			rf = new RandomAccessFile(destFile, "rw");
			rf.seek(start);
			int len = -1;
			
			while((len = bis.read(buf))!=-1)
			{
				rf.write(buf, 0, len);
			}
			
			System.out.println(Thread.currentThread().getName() + "已下载完毕");
		}catch (Exception e) 
		{
			e.printStackTrace();
		}finally
		{
			if(rf != null)
			{
				try {
					rf.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(bis != null)
			{
				try {
					bis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
}

分享到:
评论

相关推荐

    HTTP多线程下载

    HTTP多线程下载是一种优化大文件下载效率的技术,它通过将大文件分割成多个部分,然后使用多个并发的HTTP请求来分别下载这些部分,从而提高了下载速度。在本例中,"HttpMultiplyDownLoad"可能是一个示例项目或代码库...

    http多线程下载程序

    《使用Winsock实现的HTTP多线程下载程序详解》 在互联网技术日新月异的今天,高效的数据传输成为了一项基本需求。特别是在处理大文件下载时,传统的单线程下载方式往往耗时过长,用户体验不佳。为了解决这个问题,...

    c#实现unity下可用的http多线程下载

    c#实现unity下可用的http多线程下载。主要是WWW接口的bundle函数不好用,而且性能也不高。支持多线程。支持单个文件和多个文件下载

    基于HTTP多线程下载工具源码

    【标题】"基于HTTP多线程下载工具源码"揭示了这个项目的核心是实现一个能够利用HTTP协议并采用多线程技术的下载程序。在互联网技术中,HTTP(超文本传输协议)是用于从Web服务器传输数据到客户端的标准协议。多线程...

    使用java实现http多线程下载

    在Java编程中,实现HTTP多线程下载是一项常见的任务,特别是在处理大文件或者需要提高下载速度的情况下。这个过程涉及到并发编程、网络I/O以及文件操作等多个领域的知识。下面,我们将详细探讨如何使用Java来实现这...

    Android下http多线程下载

    在Android平台上,实现HTTP多线程下载是一项常见的需求,它能显著提高大文件下载的速度,尤其是在网络环境不稳定或带宽有限的情况下。本文将详细讲解如何在Android应用中实现这一功能。 首先,理解HTTP协议是基础。...

    java http多线程下载器

    Java HTTP多线程下载器是一种优化的网络资源下载工具,它利用Java编程语言实现了HTTP协议的下载功能,并结合多线程技术以提高下载速度。在本文中,我们将深入探讨Java HTTP多线程下载器的工作原理、核心概念以及实现...

    VB http多线程下载源码不用Active控件

    标题中的“VB http多线程下载源码不用Active控件”指的是使用Visual Basic(VB)编程语言编写的一个HTTP下载程序,该程序支持多线程下载,且不依赖于ActiveX控件。在VB中,多线程技术可以提高程序的执行效率,特别是...

    C# Winform 实现Http多线程下载

    在C#编程中,实现Http多线程下载是一项常见的任务,尤其在处理大文件或需要提高下载速度的情况下。本文将详细讲解如何利用C# Winform框架实现这一功能,并结合多线程技术提升下载效率。 首先,我们需要理解Http协议...

    Http多线程下载与断点续传分析

    `Http多线程下载与断点续传分析`这个主题聚焦于提高文件下载效率和用户体验的技术手段。多线程下载利用了计算机的多核处理器能力,将一个大文件分割成多个部分,同时进行下载,从而显著提高了下载速度。而断点续传则...

    Android的HTTP多线程下载示例代码

    在Android开发中,HTTP多线程下载是一种优化大文件下载速度和效率的技术。本文将详细介绍如何在Android平台上实现HTTP多线程下载,并提供一个简单的示例代码。 首先,多线程下载的核心思想是将一个大的文件分成多个...

    C#HTTP多线程下载实验.rar_HTTP_c# 多线程 下载_meng3u_下载_断点续传

    在C#编程中,HTTP多线程下载是一项重要的技术,特别是在处理大文件或者需要提高下载速度的情况下。这个项目,"C# HTTP多线程下载实验",旨在教授如何利用C#实现一个支持断点续传功能的下载工具,能够应对用户在下载...

    symbian平台http多线程下载

    在Symbian操作系统上实现HTTP多线程下载是一项技术挑战,因为Symbian是一个古老但功能强大的移动操作系统,尤其在处理网络I/O和多任务时需要深入理解其系统架构。以下将详细介绍Symbian平台上的HTTP多线程下载的相关...

    使用JAVA实现HTTP多线程下载

    在Java编程中,实现HTTP多线程下载是一项常见的需求,尤其对于处理大文件时,多线程能显著提高下载效率。以下将详细解释如何使用Java实现这一功能。 首先,我们需要连接到资源服务器并获取资源信息。在Java中,我们...

    c#的HTTP多线程下载源码

    这是我按照一个教程做的,在vs2005下用C#写的,现在可以实现小文件,少线程的下载,当下载大文件,或使用线程的数量大时程序会自己关闭,不知道什么原因,请大家一起来学习完善这个程序,我的邮箱zbl131@126....

    qt多线程高效下载文件

    在多线程下载中,每个文件的下载任务可以放在一个单独的QThread中执行,这样可以避免因为单个下载任务阻塞主线程而影响用户界面的响应速度。 2. **QNetworkAccessManager**:这是Qt提供的网络访问管理器,可以发起...

    qt 线程池实现多线程下载

    本篇文章将深入讲解如何使用Qt的线程池实现多线程HTTP下载,并涵盖限速下载及进度显示的相关知识。 首先,我们要了解Qt中的线程池(QThreadPool)机制。QThreadPool是Qt提供的一个管理线程资源的类,它可以调度和...

Global site tag (gtag.js) - Google Analytics