码迷,mamicode.com
首页 > 编程语言 > 详细

java中多线程下载

时间:2015-07-04 01:06:25      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:java 多线程 下载

package com.download;

import java.io.File;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;

public class MutileThreadDown {
private static int blockCount=3;
private static int blockSize;
	public static void main(String[] args) throws Exception{
		String path="http://localhost:8080/Web025Server/media/bootstrap.avi";
		
		URL url=new URL(path);
		
		HttpURLConnection conn=(HttpURLConnection) url.openConnection();
		conn.setRequestMethod("GET");
		conn.setConnectTimeout(10000);
		conn.setReadTimeout(5000);
		int responseCode=conn.getResponseCode();
		if(responseCode==200){
			int size=conn.getContentLength();
			System.out.println("服务器端的长度"+size);
			blockSize=size/blockCount;
			
			//创建一个跟服务器端大小相同的空白文件
			File file=new File("aa.avi");
			RandomAccessFile raf=new RandomAccessFile(file,"rw");
			raf.setLength(size);//设置文件的的大小
			//2.开启若干个子线程,分别下载资源
			for(int i=1;i<=blockCount;i++){
				int startIndex=(i-1)*blockSize+0;
				int endIndex=i*blockSize-1;
				if(i==blockCount){
					endIndex=size-1;
				}
				new DownLoadThread(startIndex, endIndex, i, path).start();;
				System.out.println("开启线程"+i+"开始的位置"+startIndex+"结束的位置是"+endIndex);
			}
		}
		conn.disconnect();
	}
	
	//定义一个线程的内部类
	private static class DownLoadThread extends Thread{
		private int startIndex;
		private int endIndex;
		private int threadi;
		private String path;
		public DownLoadThread(int startIndex, int endIndex, int threadi,
				String path) {
			super();
			this.startIndex = startIndex;
			this.endIndex = endIndex;
			this.threadi = threadi;
			this.path = path;
		}
		@Override
		public void run() {

			try {
				String path="http://localhost:8080/Web025Server/media/bootstrap.avi";
				
				URL url=new URL(path);
				
				HttpURLConnection conn=(HttpURLConnection) url.openConnection();
				conn.setRequestMethod("GET");
				conn.setRequestProperty("Range", "bytes="+startIndex+"-"+endIndex);
				conn.setConnectTimeout(10000);
				conn.setReadTimeout(5000);
				int responseCode=conn.getResponseCode();
				System.out.println("服务器的响应码"+responseCode);
				
				//创建一个跟服务器端大小相同的空白文件
				File file=new File("aa.avi");
				RandomAccessFile raf=new RandomAccessFile(file,"rw");
				InputStream in=conn.getInputStream();
				raf.seek(startIndex);//从哪个位置开始写文件
				int len=-1;
				byte[] bytes=new byte[1024];
				while((len=in.read(bytes))!=-1){
					raf.write(bytes, 0, len);
				}
				in.close();
				raf.close();
				
			} catch (Exception e) {
				e.printStackTrace();
			} 
		}
	}
	
	

}


本文出自 “Java大白的战地” 博客,请务必保留此出处http://8023java.blog.51cto.com/10117207/1670663

java中多线程下载

标签:java 多线程 下载

原文地址:http://8023java.blog.51cto.com/10117207/1670663

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!