`

实现多线程下载

 
阅读更多

在实际的下载中会使用多线程下载,这样会抢占更多的CPU资源来增强下载速度:

public class MulThreadDownLoad(){

    public static final void main(String[] args){
          String path = "http://127.0.0.1:8080/myweb/test.text"
           new MulThreadDownLoad().downLoad(path);
    }
   //下载文件方法
   private downLoad(String path,int threadSize){
        URL url=new URL(path);
       HttpURLConnection conn=( HttpURLConnection)url.openConnection();
       conn.setConnectTimeout(5000);
       conn.setRequestMethod("GET");
      if(conn.getResponseCode()==200){
          int length = conn.getcontentLength();
          File file=new File(getFileName(path));
         RandomAccessFile accessFile = new RandomAccessFile(file,"rwd");
         accessFile.setLength(length);
         accessFile.close();

       //计算每条线程下载的数据量
     int block = length%threadSize==0 ?  length/threadSize:         length/threadSize+1;
       //开启多个线程
        for(int threadId=0;threadId<threadSize;threadId++){
           new  DownloadThread().start(); 
          }
        }
    }
   private String getFileName(String path){
       return path.subString(path.lastIndexOf("/"));
   }

   private class DownloadThread extend Thread{
          private int threadId;
            private   int block;
          private   URL url;
          private   File file;
          private DownloadThread (int threadId,int block,URL url,File file){
              this.threadId=threadId;
              ...
            }
          public void run(){
               int start= threadId*block;
               int end = (threadId+1)*block-1;
           RandomAccessFile accessFile = new RandomAccessFile(file,"rwd");
              accessFile.seek(start);
     HttpURLConnection conn=HttpURLConnection)url.openConnection();
              conn.setConnectTimeout(5000);
              conn.setRequestMethod("GET");   
              conn.setRequestProperty("range","bytes="+start+"-"+end);
              //注意分段下载返回的成功码值为206,不是200
               if(conn.getResponseCode()==206){
                   //省略流读取数据
                   InputStream in = conn.getInputStream();
                }
           }
    }

}

 

分享到:
评论

相关推荐

    Android实现多线程下载

    本教程将深入讲解如何在Android环境中实现多线程下载功能,以及涉及的相关知识点。 首先,我们需要理解Android的线程模型。Android系统的主要UI线程(也称为主线程)负责处理用户交互和界面更新。为了不影响用户...

    C#实现多线程下载文件

    本文将深入探讨如何在C#中实现多线程下载文件,涉及的知识点包括线程池、异步编程、进度更新以及错误处理。 首先,我们需要了解线程的基本概念。在C#中,线程是程序执行的独立路径,每个线程都有自己的调用堆栈,...

    winform实现多线程下载

    本文将深入探讨如何在WinForm应用程序中实现多线程下载。 首先,了解多线程的基本概念至关重要。线程是程序执行的最小单位,一个进程中可以有多个线程同时运行。在下载场景中,多线程可以让我们同时从服务器获取多...

    java实现多线程下载

    下面我们将深入探讨如何使用Java实现多线程下载。 1. **线程基础知识**: - 线程是操作系统调度的基本单位,一个进程中可以有多个线程并发执行。 - Java提供了内置的线程支持,包括`Thread`类和`Runnable`接口,...

    python 实现多线程下载m3u8格式视频并使用fmmpeg合并

    多线程下载m3u8格式的视频能显著提高下载速度,特别是在网络条件不稳定或者视频文件较大的情况下。 本实例主要分为以下几个步骤: 1. **预下载**:首先,我们需要获取m3u8文件。这通常通过发送HTTP请求到m3u8链接...

    Java实现多线程下载源代码

    本项目"Java实现多线程下载源代码"正是这样一个示例,它使用了NetBeans IDE创建用户界面,使得用户能够更加直观地管理和监控下载过程。 首先,我们来深入理解Java中的多线程。在Java中,线程是程序执行的最小单位,...

    android 实现多线程下载。

    在Android平台上实现多线程下载是一项常见的任务,尤其在处理大文件时,为了提高下载速度和用户体验,通常会采用多线程技术。本教程将详细解释如何在Android中实现这一功能。 首先,我们需要理解多线程下载的基本...

    Androdi 简易实现多线程下载

    本文将深入探讨如何使用`HttpURLConnection`在Android中实现多线程下载,让开发者更好地理解和运用这一技术。 首先,理解多线程下载的基本原理至关重要。在单线程下载中,数据从服务器到客户端的传输是连续的,如果...

    xUtils实现多线程下载和断点续传

    总结,通过xUtils的HttpUtils模块,我们可以轻松实现多线程下载和断点续传功能,提高下载效率和用户体验。在实际应用中,还可以根据网络环境和用户需求灵活调整线程数和下载策略。记住,良好的用户体验往往来源于对...

    Java实现多线程下载和断点续传

    1. 把每个下载文件切成若干个块...2. HTTP Header里增加Range,如果服务器返回Cotent-Range 说明服务器支持文件定位,可以实现多线程下载 详细看这里 http://blog.csdn.net/maoxiang/archive/2010/04/02/5446293.aspx

    java实现多线程下载代码

    java实现多线程下载,控制台实时输出下载进度,对于学习多线程与网络有一定的帮助

    php利用curl实现多线程下载图片类

    通过WEB服务器来实现PHP多线程功能,当然,对多线程有深入理解的人都知道通过WEB服务器实现的多...利用curl实现多线程下载图片类,其实是php利用curl实现的一个多线程类,有了这个类,我们也可利用该类执行多线程任务了。

    php利用curl实现多线程下载图片类.zip

    通过WEB服务器来实现PHP多线程功能,当然,对多线程有深入理解的人都知道通过WEB服务器实现的多...利用curl实现多线程下载图片类,其实是php利用curl实现的一个多线程类,有了这个类,我们也可利用该类执行多线程任务了。

    qt 线程池实现多线程下载

    本篇文章将深入讲解如何使用Qt的线程池实现多线程HTTP下载,并涵盖限速下载及进度显示的相关知识。 首先,我们要了解Qt中的线程池(QThreadPool)机制。QThreadPool是Qt提供的一个管理线程资源的类,它可以调度和...

    c++实现多线程下载http资源

    在C++编程中,实现多线程下载HTTP资源是一项常见的任务,特别是在开发高效网络应用程序时。多线程技术可以充分利用现代计算机的多核处理器能力,加快下载速度,提高用户体验。以下将详细介绍如何使用C++来实现这个...

    java实现多线程下载文件

    在Java编程中,多线程下载文件是一种优化大文件下载速度和效率的技术。它通过将一个大文件分割成多个小部分,然后同时启动多个线程分别下载这些部分,从而达到加速下载的效果。以下是对这个主题的详细解释: 1. **...

    python实现多线程下载大量图片的代码

    python实现多线程下载大量图片的代码,代码中加入了代理ip,加入了随机head,这两项内容可以防止客户机ip被屏蔽,从目前测试的结果来看,代码的使用效果非常好,对于有需要的小伙伴可以下载使用。同理该代码可以用于...

    Python-Python实现多线程下载http文件并将最终代码转化为可执行文件

    下面将详细阐述如何使用Python实现多线程下载HTTP文件以及如何将Python脚本转化为可执行的.exe文件。 首先,我们需要导入必要的库,如`requests`用于发送HTTP请求,`threading`用于多线程操作,以及`os`和`sys`进行...

Global site tag (gtag.js) - Google Analytics