http断点续传简单实现
/*
**sitefilefetch.java
*/
package netfox;
import java.io.*;
import java.net.*;
public class sitefilefetch extends thread {
siteinfobean siteinfobean = null; //文件信息bean
long[] nstartpos; //开始位置
long[] nendpos; //结束位置
filesplitterfetch[] filesplitterfetch; //子线程对象
long nfilelength; //文件长度
boolean bfirst = true; //是否第一次取文件
boolean bstop = false; //停止标志
file tmpfile; //文件下载的临时信息
dataoutputstream output; //输出到文件的输出流
//负责整个文件的抓取,控制内部线程(filesplitterfetch类)
public sitefilefetch(siteinfobean bean) throws ioexception
{
siteinfobean = bean;
//tmpfile = file.createtempfile ("zhong","1111",new file(bean.getsfilepath()));
tmpfile = new file(bean.getsfilepath()+file.separator + bean.getsfilename()+".info");
if(tmpfile.exists ())
{
bfirst = false;
read_npos();
}
else
{
nstartpos = new long[bean.getnsplitter()];
nendpos = new long[bean.getnsplitter()];
}
}
public void run()
{
//获得文件长度
//分割文件
//实例filesplitterfetch[iocblog.net 来源]
//启动filesplitterfetch线程
//等待子线程返回
try{
if(bfirst)
{
nfilelength = getfilesize();
if(nfilelength == -1)
{
system.err.println("file length is not known!");
}
else if(nfilelength == -2)
{
system.err.println("file is not access!");
}
else
{
for(int i=0;i<nstartpos.length;i++)
{
nstartpos[i] = (long)(i*(nfilelength/nstartpos.length));
}
for(int i=0;i<nendpos.length-1;i++)
{
nendpos[i] = nstartpos[i+1];
}
nendpos[nendpos.length-1] = nfilelength;
}
}
//启动子线程
filesplitterfetch = new filesplitterfetch[nstartpos.length];
for(int i=0;i<nstartpos.length;i++)
{
filesplitterfetch[i] = new filesplitterfetch(siteinfobean.getssiteurl(),
siteinfobean.getsfilepath() + file.separator + siteinfobean.getsfilename(),
nstartpos[i],nendpos[i],i);
utility.log("thread " + i + " , nstartpos = " + nstartpos[i] + ", nendpos = " + nendpos[i]);
filesplitterfetch[i].start();
}
// filesplitterfetch[npos.length-1] = new filesplitterfetch(siteinfobean.getssiteurl(),
siteinfobean.getsfilepath() + file.separator + siteinfobean.getsfilename(),npos[npos.length-1],nfilelength,npos.length-1);
// utility.log("thread " + (npos.length-1) + " , nstartpos = " + npos[npos.length-1] + ",
nendpos = " + nfilelength);
// filesplitterfetch[npos.length-1].start();
//等待子线程结束
//int count = 0;
//是否结束while循环
boolean breakwhile = false;
while(!bstop)
{
write_npos();
utility.sleep(500);
breakwhile = true;
for(int i=0;i<nstartpos.length;i++)
{
if(!filesplitterfetch[i].bdownover)
{
breakwhile = false;
break;
}
}
if(breakwhile)
break;
//count++;
//if(count>4)
// sitestop();
}
system.err.println("文件下载结束!");
}
catch(exception e){e.printstacktrace ();}
}
Tag: 断点续传
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。