多线程下载器(不含数据库部分)

多线程下载器(不含数据库部分)

1、写在前面:

    虽然demo中程序框架已搭建完成,但是由于笔者时间原因,暂时只完成了核心部分:多线程下载的部分,其他数据库、服务通知、暂停部分还未添加到项目中。

2、相关知识点:

(1)Java线程及停止线程的方式

(2)Java RandomAccessFile文件操作

(3)HttpURLConnection相关range字段的配置

(4)Sqlite同步操作

2、核心思想:

(1)通过HttpURLConnection判断服务器是否支持断电续传:

<1>->直接开启普通的多线程下载(遇到断网等情况便会重新下载)

<2>->开启普通的多线程下载,但是每个线程都含有自己的下载进度信息,以便断网或用户暂停开始重新下载重新开启下载。笔者在针对不同的下载尺寸智能的分配不同的线程数量去下载资源,通过设置缓冲区大小来提高下载速度。

3、核心技术:

(1)HttpURLConnection的配置

(2)RandomAccessFile随机文件的读取以及缓冲区的设置

(3)线程的暂停与启动

4、分析结果:

1)将功能划分为三大部分:下载器(统一的外部接口)、存储器(内部的存储实现)、通知服务(用户交互部分)。

(2)项目结构:


5、核心代码:

package com.jx.downloader;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;

import android.content.Context;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;

import com.jx.dbhelper.DownloadRecordDB;
import com.jx.model.DownloadModel;

/**
 * 自定义下载器: 1、根据即将下载的内容大小智能的分配下载线程数量,每个线程通过Downloader携带自身线程的下载信息(下载起点、终点、线程名称)
 * 2、如果服务器支持断电续传则开启数据库
 * ,在下载处于暂停的状态时(导致下载暂停的原因可能是手动暂停或者网络不佳),自动保存下载信息到数据库,在取消下载的时候自动清空数据库信息,
 * 重新开始下载的时候,读取内容重新下载(一般情况本地存储变量还未被回收,不必从数据库重新读取) 2、使用RandomAccessFile存储下载的内容
 * 
 * @author J_X 2016年3月19日09:58:00
 */
public class JX_Downloa
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值