package org.act.down;import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
/***************************
* 多线程下载
* @author shenkunlin
* date 2013/8/13
*/
public class ThreadDown extends Thread { private int id; // 线程ID private File file; // 目标文件 private int size; // 每个文件大小 private URL url; public ThreadDown(int id, File file, int size, URL url) {
this.id = id;
this.file = file;
this.size = size;
this.url = url;
} @Override
public void run() {
//当前线程开始下载处
int start = id * size;
//当前线程结束下载处
int end = (id+1) * size -1;
try {
//建立随机操作文件对象
RandomAccessFile raf=new RandomAccessFile(file, "rw");
//设置操作文件的接入点
raf.seek(start);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
//设置超时时间
con.setReadTimeout(10 * 1000);
//设置请求方式
con.setRequestMethod("GET");
//指定网络位置的下载段和结束段
con.setRequestProperty("Range", "bytes="+start+"-"+end);
//获得输入流
InputStream in =con.getInputStream();
//创建缓冲区
byte[] data = new byte[1024];
int len=0;
//循环读写数据
while((len=in.read(data))!=-1){
raf.write(data, 0, len);
}
raf.close();
System.out.println("线程 ["+id+"] 下载完成。");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
/***************************
* 多线程下载
* @author shenkunlin
* date 2013/8/13
*/
public class ThreadDown extends Thread { private int id; // 线程ID private File file; // 目标文件 private int size; // 每个文件大小 private URL url; public ThreadDown(int id, File file, int size, URL url) {
this.id = id;
this.file = file;
this.size = size;
this.url = url;
} @Override
public void run() {
//当前线程开始下载处
int start = id * size;
//当前线程结束下载处
int end = (id+1) * size -1;
try {
//建立随机操作文件对象
RandomAccessFile raf=new RandomAccessFile(file, "rw");
//设置操作文件的接入点
raf.seek(start);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
//设置超时时间
con.setReadTimeout(10 * 1000);
//设置请求方式
con.setRequestMethod("GET");
//指定网络位置的下载段和结束段
con.setRequestProperty("Range", "bytes="+start+"-"+end);
//获得输入流
InputStream in =con.getInputStream();
//创建缓冲区
byte[] data = new byte[1024];
int len=0;
//循环读写数据
while((len=in.read(data))!=-1){
raf.write(data, 0, len);
}
raf.close();
System.out.println("线程 ["+id+"] 下载完成。");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}