Java多线程断点下载分析

1、主函数main()——调用抽象类DownloadUtils.java,传入参数:url、fileName、filePath、threadNum

2、DownloadUtils.java——是抽象类,download()为抽象方法,根据传入的参数选择调用的方法

2.1、创建DownloadInfo.java类的实例bean;

DownloadInfo bean = new DownloadInof(url,fileName,filePath,threadNum);

2.2、通过LogUtils.java类的info()方法输出相关信息;

LogUtils.info(bean);

2.3、用DownloadInfo.java的实力bean创建BatchDownloadFile.java类的实例down

BatchDownloadFile down = new BatchDownloadFile(bean);

2.4、创建线程并开始

new Thread(down).start();

3、DownloadInfo.java——描述下载文件的相关信息

3.1、文件的信息包括:url、fileName、filePath、splitter、默认保存路径FILE_PATH、默认分块数SPLITTER_NUM

3.2、创建构造方法:根据传入的参数个数创建3个构造方法

DownloadInfo(String url)

DownloadInfo(String url,int splitter)

DownloadInfo(String url,String fileName,String filePath,int splitter)

构造函数中,将传入的参数赋值给变量时,需要判断对应参数是否为空,并对它为空的情况下做出相应处理:

  • url为空时,报RuntimeException错误;
  • fileName为空时,通过getFileName(String url)方法获取链接中的文件名;
  • filePath为空时,使用默认保存路径;
  • splitter为空时,使用默认分块数;

3.3、对变量添加get()和set()方法

4、BatchDownloadFile.java——实现Runnable接口,重写run()方法

4.1、类的作用:

  • 完成读取指定url资源的内容,并获取该资源的长度;
  • 将该资源分成指定的快数,并将每块的起始下载位置、结束下载位置分别保存在数组中;
  • 每块都单独开辟一个独立线程开始下载;
  • 开始下载前,需要创建一个临时文件,写入当前下载线程的开始下载指针位置和结束下载指针位置;

4.2、构造函数:BatchDownload(DownloadInfo downloadInfo)

4.2.1、临时文件保存路径tempPath:根据传入的downloadInfo获得临时文件保存路径;

4.2.2、创建临时文件tempFile:根据tempPath创建File的实例tempFile;

4.2.3、判断是否存在读入点位置的文件

若有,则通过readPosInfo()方法读取内容;

若无,则根据downloadIno的分块数,创建起始下载点位置数组和结束下载位置数组,数组长度为分块数;

4.3、readPosInfo()方法——读取临时文件中的写入点的位置信息

4.3.1、通过tempFile创建FileInputStream实例;

4.3.2、通过上一步生成的FileInputStream创建DataInputStream实例dis;

时间: 2024-10-14 04:52:23

Java多线程断点下载分析的相关文章

Java多线程断点下载

多线程下载已经提高了下载的效率,但是当一些特殊情况发生的时候,我们需要对程序进行处理,这样效率会更高.比如,断电断网等造成下载中断,那么我们下一次又要重新开始下载,这样效率底下,所以我们可以考虑使用断点下载.其原理主要是把每次每个线程的下载状况(已经下载的位置)保存到文件,下次读取出来,从上一次下载的位置继续下载,这样就大大提高了下载的效率. 效果: 开始下载: 下载过程中: 下载过程中,系统临时文件保存已下载的位置: 下载完毕,系统清楚记录下载位置的临时文件: 附代码如下: 1 import

java多线程断点下载原理(代码实例演示)

原文:http://www.open-open.com/lib/view/open1423214229232.html 其实多线程断点下载原理,很简单的,那么我们就来先了解下,如何实现多线程的断点下载,首先:你必须明白第一点,那么就是,什么是多线程下载,该知识点可以查看本博客上一篇文章,Android之多线程下载原理,断点下载呢,其实就是在这个的基础之上添加了一些东西,那么添加了什么东西了,现在来做一个详细的了解. 1.在下载的过程中,边下载,变用一个文件来记录下载的位置,也就是下载了多少的数据

java 多线程断点下载功能

import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; public class Demo { //线程个数 public static int threadCount = 3; //线程下载完成的个数 public

多线程断点下载原理(java代码实例演示)

其实多线程断点下载原理,很简单的,那么我们就来先了解下,如何实现多线程的断点下载,首先:你必须明白第一点,那么就是,什么是多线程下载,该知识点可以查看本博客上一篇文章,Android之多线程下载原理,断点下载呢,其实就是在这个的基础之上添加了一些东西,那么添加了什么东西了,现在来做一个详细的了解. 1.在下载的过程中,边下载,变用一个文件来记录下载的位置,也就是下载了多少的数据 1.创建文件 2.记录下载多少数据 3.存储数据 2.第二次下载的时候,就去读取文件中是否存有数据,读取上次下载的位置

Android/java http多线程断点下载(附源码)

先看下项目结构: http多线程断点下载涉及到 数据库,多线程和http请求等几个模块,东西不是很多,想弄清楚也不是很困难,接下来我和大家分享下我的做法. 一.先看MainActivity.java 成员变量,主要是一些下载过程的变量和handler private String path = "http://192.168.1.3:8080/wanmei/yama.apk"; private String sdcardPath; private int threadNum = 5;

JAVA下实现多线程断点下载

多线程断点下载:顾名思义是用多线程实现的,断点是当第三方因素(断电.断网等)中断下载时,下次下载可以继续上次下载的地方下载. 1.通过getContentLength可以获取要下载文件的大小,这样可以在本机上创建一个相同大小的文件用来下载. int fileLength = connection.getContentLength(); 2.由于是多线程,所以要给每一个线程均分分配要下载的位置. for(int i = 0; i < threadCount; i ++) { int startTh

后台多任务多线程断点下载

忘了上图: 多线程断点下载其实不是很难,主要就是三个方面: 1.根据文件的大小和下载线程的数量,确定每个下载线程要下载的分割文件的大小: 2.记录每个下载线程已经下载完成的进度: 3.将每个线程下载的分割的文件合并到一个文件中. 那么怎么将远程的一个文件分割成三部分来下载呢?其实在HTTP协议中,有一个Range字段,用于客户端到服务器端的请求,可通过该字段指定下载文件的某一段大小,及其单位,格式为:Range: bytes x - y,eg:Range: bytes=0-100 下载从第0 -

Android实现多线程断点下载

本案例在于实现文件的多线程断点下载,即文件在下载一部分中断后,可继续接着已有进度下载,并通过进度条显示进度.也就是说在文件开始下载的同时,自动创建每个线程的下载进度的本地文件,下载中断后,重新进入应用点击下载,程序检查有没有本地文件的存在,若存在,获取本地文件中的下载进度,继续进行下载,当下载完成后,自动删除本地文件. 1. 定义布局文件需要用到的属性名及内容 2. 设置用户的Internet权限和关于SD卡的权限 <span style="font-size:14px;">

iOS开发网络篇—大文件的多线程断点下载(转)

http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始,创建一个和要下载的文件大小相同的文件(如果要下载的文件为100M,那么就在沙盒中创建一个100M的文件,然后计算每一段的下载量,开启多条线程下载各段的数据,分别写入对应的文件部分). 项目中用到的主要