DownloadRunnable.java
1.子线程
public class DownloadRunnable implements Runnable {
private String url;
private File file;
private int start;
private int end;
private long startTime;
public DownloadRunnable(String url, File file, int start, int end, long startTime) {
this.url = url;
this.file = file;
this.start = start;
this.end = end;
this.startTime = startTime;
}
@Override
public void run() {
try {
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Range", "bytes=" + start + "-" + end);
RandomAccessFile accessFile = new RandomAccessFile(file, "rw");
accessFile.seek(start);
int code = connection.getResponseCode();
if (code == 206) {
InputStream is = connection.getInputStream();
byte[] buffer = new byte[102400];
int length;
while ((length = is.read(buffer)) != -1) {
accessFile.write(buffer, 0, length);
}
System.out.println("下载完成" + (System.currentTimeMillis() - startTime));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.主线程
ThreadDownload.java
public class ThreadDownload {
public static void main(String[] args) {
long l = System.currentTimeMillis();
try {
String url = "http://skycnxz2.wy119.com/4/wandoujia.apk.apk";
File file = new File("wandoujia.apk");
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("GET");
int contentLength = connection.getContentLength();
int range = contentLength / 5;
for (int i = 0; i < 5; i++) {
int start = i * range;
int end = start + range;
if (i == 4) {
end = contentLength - 1;
}
new Thread(new DownloadRunnable(url, file, start, end, l)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}