知识大全 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) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 断点续传的原理
/** *authorannegu *date */ annegu做了一个简单的Http多线程的下载程序来讨论一下多线程并发下载以及断点续传的问题 这个程序的功能就是可以分多个线程从目标
用Java实现HTTP断点续传功能(3) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! /*
用Java实现HTTP断点续传功能(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! //启动
Java网络编程从入门到精通(24):实现HTTP断点续传下载工具(附源代码) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,
如何使用.NET实现断点续传功能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 顾名思义断点续传
使用VisualC#实现断点续传 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs
PHP下载远程文件类(支持断点续传) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! PHP下载远
知识大全 QQ传文件的时候突然电脑关机,那么重启后还能续传么
QQ传文件的时候突然电脑关机,那么重启后还能续传么?紧急求救! 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来
Delphi调试断点无效的解决方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如果在设计状态