您的位置:首页 > 编程语言 > Java开发

java多线程下载

2017-03-04 11:48 162 查看
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;

public class DownLoad {
static String path = "http://127.0.0.1:8088/baiduyun.zip";
static int threadCount = 3;
public static void main(String[] args) {

try {
URL url = new URL(path);
HttpURLConnection urlCon = (HttpURLConnection) url.openConnection();
urlCon.setRequestMethod("GET");
urlCon.setConnectTimeout(5000);
int code = urlCon.getResponseCode();
if(code == 200){

// 获取所要下载的文件的长度
int length = urlCon.getContentLength();
// 创建一个一样大的文件
RandomAccessFile file = new RandomAccessFile("D:\\Work\\download\\baiduyun.zip", "rw");
file.setLength(length);
// 计算每个线程要下载多少数据
int blockSize = length/threadCount;
for(int i=0;i<threadCount;i++){
int startSize = i * blockSize;
int endSize = (++i) * blockSize -1;
if(i == threadCount-1){
endSize = length-1;
}
new DownLoadThread(startSize,endSize,i).start();
}

}
} catch (Exception e) {
e.printStackTrace();
}
}

private static class DownLoadThread extends Thread{
private int startIndex;
private int endIndex;
private int threadId;

public DownLoadThread(int startIndex, int endIndex, int threadId) {
this.startIndex = startIndex;
this.endIndex = endIndex;
this.threadId = threadId;
}

@Override
public void run() {
try {
URL url = new URL(path);
HttpURLConnection urlCon = (HttpURLConnection) url.openConnection();
urlCon.setRequestMethod("GET");
urlCon.setConnectTimeout(5000);
// 设置Range头,用计算好的开始索引和结束索引到服务器请求数据
urlCon.setRequestProperty("Range", "bytes="+startIndex+"-"+endIndex);
int code = urlCon.getResponseCode();
if(code == 206){
System.out.println("线程" + threadId);
InputStream is = urlCon.getInputStream();
byte[] buffer = new byte[1024];
int len = -1;
RandomAccessFile file = new RandomAccessFile("D:\\Work\\download\\baiduyun.zip", "rw");
file.seek(startIndex);
while((len = is.read(buffer))!=-1){
file.write(buffer, 0, buffer.length);
}
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java多线程下载