知识大全 http断点续传简单实现

Posted 文件

篇首语:吃的苦中苦,方为人上人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 http断点续传简单实现相关的知识,希望对你有一定的参考价值。

   /*  **SiteFileFetch java  */  package NetFox;  import java io *;  import *;      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 new File(bean getSFilePath()));  tmpFile = new File(bean getSFilePath()+File separator + bean getSFileName()+ );  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 == )    System err println( File Length is not known! );    else if(nFileLength == )    System err println( File is not access! );    else    for(int i= ;i<nStartPos length;i++)    nStartPos[i] = (long)(i*(nFileLength/nStartPos length));    for(int i= ;i<nEndPos length ;i++)    nEndPos[i] = nStartPos[i+ ];    nEndPos[nEndPos length ] = nFileLength;          //启动子线程  fileSplitterFetch = new FileSplitterFetch[nStartPos length];  for(int i= ;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 ] = new FileSplitterFetch(siteInfoBean getSSiteURL()   siteInfoBean getSFilePath() + File separator + siteInfoBean getSFileName() nPos[nPos length ] nFileLength nPos length );  // Utility log( Thread + (nPos length ) + nStartPos = + nPos[nPos length ] +   nEndPos = + nFileLength);  // fileSplitterFetch[nPos length ] start();      //等待子线程结束  //int count = ;  //是否结束while循环  boolean breakWhile = false;      while(!bStop)    write_nPos();  Utility sleep( );  breakWhile = true;      for(int i= ;i<nStartPos length;i++)    if(!fileSplitterFetch[i] bDownOver)    breakWhile = false;  break;      if(breakWhile)  break;      //count++;  //if(count> )  // siteStop();        System err println( 文件下载结束! );    catch(Exception e)e printStackTrace ();        //获得文件长度  public long getFileSize()    int nFileLength = ;  try  URL url = new URL(siteInfoBean getSSiteURL());  HttpURLConnection Connection = (HttpURLConnection)url openConnection ();  ( User Agent NetFox );      int responseCode=();  if(responseCode>= )    processErrorCode(responseCode);  return ; // represent access is error        String sHeader;      for(int i= ;;i++)    //DataInputStream in = new DataInputStream( ());  //Utility log(in readLine());  sHeader=(i);  if(sHeader!=null)    if(sHeader equals( Content Length ))    nFileLength = Integer parseInt((sHeader));  break;      else  break;      catch(IOException e)e printStackTrace ();  catch(Exception e)e printStackTrace ();      Utility log(nFileLength);      return nFileLength;        //保存下载信息(文件指针位置)  private void write_nPos()    try  output = new DataOutputStream(new FileOutputStream(tmpFile));  output writeInt(nStartPos length);  for(int i= ;i<nStartPos length;i++)    // output writeLong(nPos[i]);  output writeLong(fileSplitterFetch[i] nStartPos);  output writeLong(fileSplitterFetch[i] nEndPos);    output close();    catch(IOException e)e printStackTrace ();  catch(Exception e)e printStackTrace ();        //读取保存的下载信息(文件指针位置)  private void read_nPos()    try  DataInputStream input = new DataInputStream(new FileInputStream(tmpFile));  int nCount = input readInt();  nStartPos = new long[nCount];  nEndPos = new long[nCount];  for(int i= ;i<nStartPos length;i++)    nStartPos[i] = input readLong();  nEndPos[i] = input readLong();    input close();    catch(IOException e)e printStackTrace ();  catch(Exception e)e printStackTrace ();        private void processErrorCode(int nErrorCode)    System err println( Error Code : + nErrorCode);        //停止文件下载  public void siteStop()    bStop = true;  for(int i= ;i<nStartPos length;i++)  fileSplitterFetch[i] splitterStop();          //负责部分文件的抓取  **FileSplitterFetch java  */  package NetFox;      import java io *;  import *;      public class FileSplitterFetch extends Thread       String sURL; //File URL  long nStartPos; //File Snippet Start Position  long nEndPos; //File Snippet End Position  int nThreadID; //Thread s ID  boolean bDownOver = false; //Downing is over  boolean bStop = false; //Stop identical  FileAccessI fileAccessI = null; //File Access interface      public FileSplitterFetch(String sURL String sName long nStart long nEnd int id) throws IOException    this sURL = sURL;  this nStartPos = nStart;  this nEndPos = nEnd;  nThreadID = id;  fileAccessI = new FileAccessI(sName nStartPos);//定位        public void run()    while(nStartPos < nEndPos && !bStop)        try  URL url = new URL(sURL);  HttpURLConnection Connection = (HttpURLConnection)url openConnection ();  ( User Agent NetFox );  String sProperty = bytes= +nStartPos+ ;  ( RANGE sProperty);  Utility log(sProperty);      InputStream input = ();  //logResponseHead(Connection);      byte[] b = new byte[ ];  int nRead;  while((nRead=input read(b )) > && nStartPos < nEndPos && !bStop)    nStartPos += fileAcces cha138/Article/program/Java/hx/201311/26057

相关参考

知识大全 用Java实现断点续传(HTTP)

用Java实现断点续传(HTTP)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  断点续传的原理

知识大全 用java多线程断点续传实践

  /**  *authorannegu  *date  */  annegu做了一个简单的Http多线程的下载程序来讨论一下多线程并发下载以及断点续传的问题  这个程序的功能就是可以分多个线程从目标

知识大全 用Java实现HTTP断点续传功能(3)

用Java实现HTTP断点续传功能(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  /*  

知识大全 用Java实现HTTP断点续传功能(2)

用Java实现HTTP断点续传功能(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  //启动

知识大全 实现HTTP断点续传下载工具(附源代码)

Java网络编程从入门到精通(24):实现HTTP断点续传下载工具(附源代码)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,

知识大全 如何使用.NET实现断点续传功能

如何使用.NET实现断点续传功能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  顾名思义断点续传

知识大全 使用Visual C#实现断点续传

使用VisualC#实现断点续传  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs

知识大全 PHP 下载远程文件类(支持断点续传)

PHP下载远程文件类(支持断点续传)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  PHP下载远

知识大全 QQ传文件的时候突然电脑关机,那么重启后还能续传么

QQ传文件的时候突然电脑关机,那么重启后还能续传么?紧急求救!  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 Delphi调试断点无效的解决方法

Delphi调试断点无效的解决方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如果在设计状态