package com.dudy.learn01.coderising.download;
import com.dudy.learn01.coderising.download.api.Connection;
import java.io.*;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
public class DownloadThread extends Thread{
private Connection conn;
private int startPos;
private int endPos;
private RandomAccessFile raf;
//private CyclicBarrier cb;
private CountDownLatch downLatch;
public DownloadThread(Connection conn, int startPos, int endPos,
/*CyclicBarrier cb*/
CountDownLatch downLatch){
this.conn = conn;
this.startPos = startPos;
this.endPos = endPos;
// this.cb = cb;
this.downLatch = downLatch;
}
public void run(){
try {
byte[] read = conn.read(startPos, endPos);
System.out.println("read length: -> "+read.length);
//这里要注意新创建一个RandomAccessFile对象,而不能重复使用download方法中创建的
raf = new RandomAccessFile(new File("/Users/dudy/Desktop/1.png"), "rw");
//将写文件的指针指向下载的起始点
raf.seek(startPos);
raf.write(read, 0, read.length);
downLatch.countDown();
// cb.await();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (raf != null){
raf.close();
}
} catch (IOException e) {
e.printStackTrace();
}
if (conn != null){
conn.close();
}
}
}
}