http断点续传简单实现

分类: J2EE   出处:iocblog整理  更新时间:2008-11-09   添加到收藏  


   /*
  **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 ();}
  }
  
  

[1] [2] [3] 下一页


Tag: 断点续传



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。