`

多线程下载的例子,测试OK

阅读更多

多线程下载的例子,测试OK 

 

 

package download;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.io.ObjectInputStream.GetField;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;




	public class MluThreadDownTest{
		
		
		public static void main(String args[]){
			final int DOWN_THREAD_NUM=4;
			final String OUT_FILE_NAME ="a.rar";
			InputStream[] isArr= new InputStream[DOWN_THREAD_NUM];
			RandomAccessFile[] outArr= new RandomAccessFile[DOWN_THREAD_NUM];
			
			try {
				//URL url=new URL("http://gdwt.newhua.com/down/setup_newhua.zip");
				URL url=new URL("http://zzidc.onlinedown.net/down/warhly.rar");
				
				isArr[0] =url.openStream();
				long fileLen=getFileLength(url);
				System.out.println("网络资源的大小"+fileLen);
				//已输出文件名创建第一个randomAccessFile输出流
				outArr[0]= new RandomAccessFile(OUT_FILE_NAME,"rw");
				//创建一个与下载资源大小相同的空文件
				for(int i=0;i<fileLen;i++){
					outArr[0].write(0);				
				}
				//每线程应该下载的字节数
				long numPerThread= fileLen/DOWN_THREAD_NUM;
				//整个下载资源整除后剩下的余数
				long left=fileLen%DOWN_THREAD_NUM;
				for(int i=0;i<DOWN_THREAD_NUM;i++){
					//为每个线程打开一个输入流,一个RandomAccessFile对象
					//让每个线程分别下载网络资源的不同部分
					if ( i!=0){
						//以URL 打开多个输入流
						isArr[i]=url.openStream();
						//以指定输出文件创建多个RandomAccessFile对象
						outArr[i] = new RandomAccessFile(OUT_FILE_NAME,"rw");	//rw,表示读写								
					}
					//分别启动多个线程来下载网络资源
					if(i==DOWN_THREAD_NUM-1){
						//最后一个线程下载指定NUMpERtHREAD+LEFT个字节
						new DownThread(i*numPerThread,(i+1)*numPerThread+left,isArr[i],outArr[i]).start();
				}else{
						new DownThread(i*numPerThread,(i+1)*numPerThread,isArr[i],outArr[i]).start();
					}
					
				}
			}  catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		

		
		public static long getFileLength(URL url) throws Exception {
			long length=0;
			URLConnection con= url.openConnection();
			long size= con.getContentLength();
			length=size;
			return length;
		}
		
	}
	

	
	
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics