package com.m0312.download;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import com.m0312.download.api.Connection;
import com.m0312.download.api.DownloadListener;
public class DownloadThread extends Thread{
Connection conn;
int startPos;
int endPos;
String descFilePath;
private CyclicBarrier cyclicBarrier;
public DownloadThread( Connection conn, int startPos, int endPos){
this.conn = conn;
this.startPos = startPos;
this.endPos = endPos;
}
public DownloadThread( Connection conn, int startPos, int endPos,
String descFilePath,CyclicBarrier cyclicBarrier){
this.conn = conn;
this.startPos = startPos;
this.endPos = endPos;
this.descFilePath=descFilePath;
this.cyclicBarrier=cyclicBarrier;
}
@Override
public void run(){
try {
/*byte[] bytes=conn.read(startPos, endPos);
os=new FileOutputStream(new File(descFilePath));
os.write(bytes, startPos, endPos-startPos+1);
cyclicBarrier.await();//等待其他线程
*/
System.out.println("开始读["+startPos+","+endPos+"]");
byte[] buffer = conn.read(startPos , endPos);
RandomAccessFile file = new RandomAccessFile(descFilePath, "rw");
file.seek(startPos);
file.write(buffer, 0, buffer.length);
file.close();
cyclicBarrier.await();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
//System.out.println("所有线程都下载完成");
//通知 FileDownloader ,自己已经做完
}
}