当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

用java多线程断点续传实践[Java编程]

赞助商链接



  本文“用java多线程断点续传实践[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

annegu做了一个简单的Http多线程的下载程序,来谈论一下多线程并发下载 以及断点续传的问题.

这个程序的功效,就是可以分多个线程从目标地址上下载数据,每个线程负 责下载一部份,并可以支持断点续传和超时重连.

下载的办法是download(),它接纳两个参数,辨别是要下载的页面的url和编 码方法.在这个负责下载的办法中,主要分了三个步骤.第一步是用来设置断点 续传时刻的一些信息的,第二步就是主要的分多线程来下载了,最后是数据的合 并.

1、多线程下载:

/** *//** http://www.bt285.cn http://www.5a520.cn
*/
public String download(String urlStr, String charset) {
     this.charset = charset;
     long contentLength = 0;
         CountDownLatch latch = new CountDownLatch (threadNum);
     long[] startPos = new long[threadNum];
     long endPos = 0;

     try {
         // 从url中得到下载的文件格局与名字
         this.fileName = urlStr.substring (urlStr.lastIndexOf("/") + 1);

         this.url = new URL(urlStr);
         URLConnection con = url.openConnection();
         setHeader(con);
         // 得到content的长度
         contentLength = con.getContentLength();
         // 把context分为threadNum段的话,每段的长度.
         this.threadLength = contentLength /  threadNum;

         // 第一步,解析已下载的暂时文件,设置断点,假如是 新的下载任务,则成立目标文件.在第4点中阐明.
         startPos = setThreadBreakpoint(fileDir,  fileName, contentLength, startPos);

         //第二步,分多个线程下载文件
         ExecutorService exec =  Executors.newCachedThreadPool();
         for (int i = 0; i < threadNum; i++)  {
             // 成立子线程来负责下载数据,每段数据的起 始位置为(threadLength * i + 已下载长度)
             startPos[i] += threadLength *  i;

             /**//*设置子线程的终止位置,非最后一个线程 即为(threadLength * (i + 1) - 1)
             最后一个线程的终止位置即为下载内容的长度 */
             if (i == threadNum - 1) {
                 endPos = contentLength;
             } else {
                 endPos = threadLength * (i +  1) - 1;
             }
             // 开启子线程,并履行.
             ChildThread thread = new ChildThread (this, latch, i, startPos[i], endPos);
             childThreads[i] = thread;
             exec.execute(thread);
         }

         try {
             // 等候CountdownLatch信号为0,表示全部子线 程都完毕.
                 latch.await();
             exec.shutdown();

             // 第三步,把分段下载下来的暂时文件中的内 容写入目标文件中.在第3点中阐明.
             tempFileToTargetFile(childThreads);

         } catch (InterruptedException e) {
             e.printStackTrace();
         }
}


  以上是“用java多线程断点续传实践[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用Javascript实现网页水印(非图片水印)
  • <b>如安在Oracle中利用Java存储历程</b>
  • 用Java实现自动在数据库表中生成ID号
  • 利用javascript获得浏览器中的星号密码办法
  • 用javabean来实现MySQL的分页显示
  • 用Java 1.1 AWT制作窗口和程序片
  • 用Java ME举行无线消息传送
  • <b>用Java筹划COM服务器</b>
  • 用Java筹划COM客户
  • <b>用Java程序生成文本的捷径</b>
  • 用Java实现FTP服务器办理策划
  • 用Java实现多线程服务器程序
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .