java的http断点续传原理(一)
来源:优易学  2011-12-11 17:08:36   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  File tmpFile; //文件下载的临时信息

  DataOutputStream output; //输出到文件的输出流

  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

  //启动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] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训