`

Android通过HTTP协议实现多线程下载

 
阅读更多

import java.io.File;  

import java.io.InputStream;  

import java.io.RandomAccessFile;  

import java.net.HttpURLConnection;  

import java.net.URL;  

  

public class MulThreadDownload {  

  

    /** 

     * @param args 

     */  

    public static void main(String[] args) {  

        String path = "http://net.itcast.cn/QQWubiSetup.exe";  

        try {  

            new MulThreadDownload().download(path, 3);  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

    /** 

     * 从路径中获取文件名称 

     * @param path 下载路径 

     * @return 

     */  

    public static String getFilename(String path){  

        return path.substring(path.lastIndexOf('/')+1);  

    }  

    /** 

     * 下载文件 

     * @param path 下载路径 

     * @param threadsize 线程数 

     */  

    public void download(String path, int threadsize) throws Exception{  

        URL url = new URL(path);  

        HttpURLConnection conn = (HttpURLConnection)url.openConnection();  

        conn.setRequestMethod("GET");  

        conn.setConnectTimeout(5 * 1000);  

        int filelength = conn.getContentLength();//获取要下载的文件的长度  

        String filename = getFilename(path);//从路径中获取文件名称  

        File saveFile = new File(filename);  

        RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd");  

        accessFile.setLength(filelength);//设置本地文件的长度和下载文件相同  

        accessFile.close();  

        //计算每条线程下载的数据长度  

        int block = filelength%threadsize==0? filelength/threadsize : filelength/threadsize+1;  

        for(int threadid=0 ; threadid < threadsize ; threadid++){  

            new DownloadThread(url, saveFile, block, threadid).start();  

        }  

    }  

      

    private final class DownloadThread extends Thread{  

        private URL url;  

        private File saveFile;  

        private int block;//每条线程下载的数据长度  

        private int threadid;//线程id  

  

        public DownloadThread(URL url, File saveFile, int block, int threadid) {  

            this.url = url;  

            this.saveFile = saveFile;  

            this.block = block;  

            this.threadid = threadid;  

        }  

  

        @Override  

        public void run() {  

            //计算开始位置公式:线程id*每条线程下载的数据长度= ?  

            //计算结束位置公式:(线程id +1)*每条线程下载的数据长度-1 =?  

            int startposition = threadid * block;  

            int endposition = (threadid + 1 ) * block - 1;  

            try {  

                RandomAccessFile accessFile = new RandomAccessFile(saveFile, "rwd");  

                accessFile.seek(startposition);//设置从什么位置开始写入数据  

                HttpURLConnection conn = (HttpURLConnection)url.openConnection();  

                conn.setRequestMethod("GET");  

                conn.setConnectTimeout(5 * 1000);  

                conn.setRequestProperty("Range", "bytes="+ startposition+ "-"+ endposition);  

                InputStream inStream = conn.getInputStream();  

                byte[] buffer = new byte[1024];  

                int len = 0;  

                while( (len=inStream.read(buffer)) != -1 ){  

                    accessFile.write(buffer, 0, len);  

                }  

                inStream.close();  

                accessFile.close();  

                System.out.println("线程id:"+ threadid+ "下载完成");  

            } catch (Exception e) {  

                e.printStackTrace();  

            }  

        }         

    }  

  

}

分享到:
评论

相关推荐

    Android基于HTTP协议的多线程断点下载器的实现源码

    我的Android进阶之旅------&gt;Android基于HTTP协议的多线程断点下载器的实现的源代码,原文地址:http://blog.csdn.net/ouyang_peng/article/details/10125409

    Android中使用HTTP协议实现多线程断点下载案例

    在Android开发中,为了提升用户...总的来说,Android中使用HTTP协议实现多线程断点下载,需要对HTTP协议、线程管理、文件操作和错误处理有深入理解。通过合理的设计和实现,可以有效地提高大文件下载的效率和用户体验。

    Android基于HTTP协议的多线程断点下载器的实现源码_优化之后

    我的Android进阶之旅------&gt;Android基于HTTP协议的多线程断点下载器的实现的源代码,原文地址:http://blog.csdn.net/ouyang_peng/article/details/10125409 这个进行了优化

    Android基于HTTP协议的多线程断点下载器的实现源码_第二次优化之后

    我的Android进阶之旅------&gt;Android基于HTTP协议的多线程断点下载器的实现的源代码,原文地址:http://blog.csdn.net/ouyang_peng/article/details/10125409 这个进行了第二次优化

    Java / Android 基于Http的多线程下载的实现

    为了实现多线程,我们需要创建多个线程,每个线程负责下载文件的一部分。以下是一个基本的步骤概述: 1. **文件分块**:根据文件大小,确定合适的分块大小,例如1MB,然后计算出需要多少个线程来下载这些块。 2. *...

    Android多线程下载

    在Android应用开发中,多线程下载是一项关键技术,它能显著提高大文件下载的效率,尤其是在网络条件不稳定的情况下。断点续传是多线程下载的一个重要特性,允许用户中断下载后,从上次停止的位置继续,提高了用户...

    Android多线程下载服务器资源

    而`MultiDownLoadDemo`这个文件可能是一个示例代码或者项目,你可以参考它来理解和实现多线程下载功能。记住,实际开发中还需要考虑错误处理、网络状态变化、用户界面更新等细节,以提供更健壮的下载服务。

    Android下http多线程下载

    在Android平台上,实现HTTP多线程下载是一项常见的需求,它能显著提高大文件下载的速度,尤其是在网络环境不稳定或带宽有限的情况下。本文将详细讲解如何在Android应用中实现这一功能。 首先,理解HTTP协议是基础。...

    android Http实现文件多线程断点下载

    在Android平台上,实现文件的多线程断点下载是一项常见的任务,这有助于提高下载速度并允许用户在中断后继续未完成的下载。以下是一个详细解释这个过程的关键知识点: 1. **HTTP请求与响应**: - HTTP是互联网上...

    android多线程下载器

    接着,我们探讨如何实现多线程下载。一个核心概念是`ExecutorService`,它允许我们管理和控制线程池。我们可以通过`Executors`工厂类创建`ExecutorService`,然后使用`submit()`方法提交下载任务。每个任务可以封装...

    Android 多线程图片下载开源代码

    Android提供了几种实现多线程的方式,包括线程池、AsyncTask、Handler/Looper、IntentService等。 开源代码中可能使用了线程池(ThreadPoolExecutor)来管理下载任务,线程池可以有效地控制运行的线程数量,避免...

    Android 实现多线程断点续传下载 源码

    在Android应用开发中,实现多线程断点续传下载是一项重要的技术,它能提高下载效率,节省用户时间,并提供良好的用户体验。以下是对这个主题的详细解析: **1. 多线程下载** 多线程下载是将一个大文件分成多个小块...

    Android平台下通过HTTP协议实现断点续传下载

    Andorid的HTTP协议多线程断点下载应用程序。直接使用单线程下载HTTP文件对我们来说是一件非常简单的事。那么,多线程断点需要什么功能? 1.多线程下载, 2.支持断点。 使用多线程的好处:使用多线程下载...

    android利用http协议把网页内容下载到指定文件夹

    在Android平台上,将网页内容通过HTTP协议下载到指定文件夹是一项常见的任务,尤其在离线浏览、数据缓存或者后台更新资源的场景中。HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,它允许客户端(如...

    Android应用源码Android平台下通过HTTP协议实现断点续传下载.zip

    总的来说,这个压缩包提供了一个完整的Android断点续传下载实现,涵盖了网络请求、多线程、文件操作和进度监控等多个方面,是学习和实践Android下载功能的好材料。通过深入研究这些源代码,开发者可以更好地理解和...

    Android多线程断点续传下载器

    通过以上知识点的整合和实现,我们可以构建一个高效、稳定且用户体验良好的Android多线程断点续传下载器。在实际项目中,还需要考虑网络状况变化、电量管理、存储空间检测等更多细节,以打造更完善的下载解决方案。

    delphi多线程批量下载

    标题“Delphi多线程批量下载”指的是使用Delphi编程语言实现的一个功能,即通过创建多个线程来同时下载多个文件。Delphi7是这个系统可能使用的版本,它支持Windows API和VCL库,提供强大的面向对象编程能力。 在...

    Android 多线程下载

    本篇将深入探讨如何在Android环境中实现多线程下载,以及相关的重要知识点。 **1. Android主线程与子线程** Android应用的UI操作必须在主线程中执行,否则会抛出`NetworkOnMainThreadException`异常。因此,下载...

    Android快速框架+多线程下载

    在Android中实现多线程下载,通常包括以下步骤: 1. **文件分块**:根据文件大小确定需要的线程数,并计算每个线程负责下载的数据范围。 2. **创建下载线程**:为每个数据块创建一个下载线程,每个线程负责下载其...

    Android多线程断点下载-IT计算机-毕业设计.zip

    通过分析和学习这些代码,学生可以深入理解Android多线程下载的工作原理,并能应用于实际项目中。 总的来说,Android多线程断点下载涉及到Android的多线程编程、网络通信、数据库操作、服务管理和用户界面交互等多...

Global site tag (gtag.js) - Google Analytics