`

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中使用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 这个进行了第二次优化

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

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

    Android开发--多线程下载加断点续传

    1.多线程下载: 首先通过下载总线程数来划分文件的下载区域:利用int range = fileSize / threadCount;得到每一段下载量;每一段的位置是i * range到(i + 1) * rang - 1,注意最后一段的位置是到filesize - 1; ...

    Android实现基于Http协议的文件下载

    Android中用到的基于Http协议的文件下载功能,支持多线程下载和断点续传. 功能说明:http://blog.csdn.net/ncepudmx/article/details/39118035

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

    1.多线程下载的原理,如下图所示注意:由于Android移动设备和PC机的处理器还是不能相比,所以开辟的子线程建议不要多于5条。当然现在某些高端机子的处理器能力比较强了,就可以多开辟几条子线程。2、为了实现断点...

    Android实现网络多线程断点续传下载实例

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

    Android的HTTP多线程下载示例代码

    本示例介绍在Android平台下通过HTTP协议实现断点续传下载。 多线程断点需要的功能 1.多线程下载, 2.支持断点。 使用多线程的好处:使用多线程下载会提升文件下载的速度。 多线程下载文件的过程是:  (1)首先...

    Android实现网络多线程断点续传下载功能

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

    老罗android开发视频教程全集百度网盘下载

    Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面...【第一版第十四章】老罗Android开发视频--多线程编程(7集) 【第一版第十五章】老罗Android开发视频--百度地图实战开发(10集)

    android客户端和服务器分别实现分页

    android端和服务器端(struts2+hibernate)编写,客户端和服务器端分别实现分页,android端采用activitygroup实现,android端分页通过http协议访问oracle数据库 只在第二个界面编写分页,采用多线程编写,附数据库·...

    Android FTP 多线程断点续传下载\上传的实例

    FTP和传统的HTTP协议有所不同,由于FTP没有所谓的头文件,因此我们不能像HTTP那样通过设置header向服务器指定下载区间。 但是FTP协议提供了一个更好用的命令REST用于从指定位置恢复任务,同时FTP协议也提供了一个...

    黎活明android教程的全程PPT

    2&gt; 网络--通过HTTP协议实现多线程断点续传下载 3&gt; 为应用添加新的Activity与参数传递 4&gt; 意图 第六天 1&gt; Activity的生命周期 2&gt; 广播接收者(实现短信监听) 3&gt; 服务与语音刻录(实现电话监听)、使用AIDL实现进程...

    Android ThinkAndroid开发框架.zip

    日志打印模块:可以较快的轻易的是实现日志打印,支持日志打印的扩展,目前支持对sdcard写入本地打印、以及控制台打印 下载器模块:可以简单的实现多线程下载、后台下载、断点续传、对下载进行控制、如开始、暂停、...

    Android使用多线程进行网络聊天室通信

    下面的程序Demo是实现一个简单的C/S聊天室的应用,每个客户端该包含两条线程:一条负责生成主界面,响应用户动作,并将用户输入的数据写入Socket对应的输出流中;另一条负责读取Socket对应的输入流中的数据(从...

    Android 常用六大框架

    (9) 下载器模块:可以简单的实现多线程下载、后台下载、断点续传、对下载进行控制、如开始、暂停、删除等等。 (10) 网络状态检测模块:当网络状态改变时,对其进行检 6、LoonAndroid 项目地址:...

Global site tag (gtag.js) - Google Analytics