package com.coderising.download;
import com.coderising.download.api.Connection;
import com.coderising.download.api.ConnectionException;
import com.coderising.download.api.ConnectionManager;
import com.coderising.download.impl.ConnectionManagerImpl;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
public class DownloadThread extends Thread {
Connection conn;
int startPos;
int endPos;
String url;
public boolean finished = false;
public DownloadThread(Connection conn, int startPos, int endPos, String url) {
this.conn = conn;
this.startPos = startPos;
this.endPos = endPos;
this.url = url;
}
public void run() {
try {
ConnectionManager cm = new ConnectionManagerImpl();
conn = cm.open(url);
byte[] result = conn.read(startPos, endPos);
String fileName = url.substring(url.lastIndexOf('/') + 1);
RandomAccessFile raf = new RandomAccessFile("D:" + File.separator + fileName, "rw");
//移动指针至该线程负责写入数据的位置。
raf.seek(startPos);
raf.write(result, 0, result.length);
raf.close();
System.out.println("线程:"+Thread.currentThread().getName()+"下载完成");
finished = true;
} catch (ConnectionException | IOException e) {
e.printStackTrace();
}
}
}