java多线程下载

来源:互联网 发布:制作音效软件 编辑:程序博客网 时间:2024/05/13 12:23
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;}@Overridepublic 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();}}}}

0 0