java多线程下载文件奇怪问题
public class DownFileSpliter extends Thread {
String dlURL;
long startPos;
long endPos;
int threadID;
boolean done = false;
public boolean stop = false;
RandomAccessFile file;
public DownFileSpliter(String dlURL, String saveAs, long nStart,
long nEnd, int id) throws
IOException {
this.dlURL = dlURL;
this.startPos = nStart;
this.endPos = nEnd;
this.threadID = id;
file = new RandomAccessFile(saveAs, "rw ");
file.seek(startPos);
}
public void run() {
try {
long start = System.currentTimeMillis();
URL url = new URL(dlURL);
HttpURLConnection httpConnection = (HttpURLConnection) url
.openConnection();
String sProperty = "bytes= " + startPos + "- ";
httpConnection.setRequestProperty( "RANGE ", sProperty);
httpConnection.setRequestProperty( "Accept ", "image/gif,image/x-xbitmap,application/msword,*/* ");
System.out.println( "线程 " + threadID + "下载文件、、、请等待 ");
InputStream input = httpConnection.getInputStream();
byte[] buf = new byte[1024];
int offset;
offset = (int) endPos - (int) startPos;
if (offset > 1024)
offset = 1024;
BufferedInputStream bis = new BufferedInputStream(httpConnection.getInputStream());
while (bis.read(buf,0,offset) > 0 && startPos < endPos)// 循环获取文件
{
offset = (int) endPos - (int) startPos;
if(offset> 1024)
offset = 1024;
// System.out.println( "threadID: " + threadID + " started: "+ startPos + " offset: " + offset);
//Thread.sleep(2000);
file.write(buf, 0, offset);
if(stop){
System.out.println( "线程: "+threadID+ ",被强制中止 ");
break;
}
startPos += offset;
}
System.out.println( "线程 " + threadID + "执行完毕!! ");
System.out.println( "线程 "+threadID+ ",共用时: " + String.valueOf(System.currentTimeMillis() - start));
file.close();
input.close();
done = true;
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
用以上线程下载网络文件,可以正常运行,而且下载下来的大小与用下载工具下载下来的内容大小一样,但是用以上程序下载时不能打开,而用工具下载的却可以打开。
特向高手请教关于多线程下载网络文件,请帮忙看看,以上程序出错在哪里,谢谢。
------解决方案--------------------感觉好像没问题啊。等待高手解答,学习。
------解决方案--------------------头疼
顶
------解决方案--------------------我也头疼~
继续顶
------解决方案--------------------