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

本文档介绍了一个多线程下载器的实现,重点在于核心的多线程下载部分,涉及Java线程、RandomAccessFile文件操作和HttpURLConnection的range字段配置。尽管程序框架已建立,但数据库、服务通知和暂停功能尚未整合。下载器根据服务器是否支持断电续传选择普通下载或带有进度信息的下载方式,并智能分配线程数量和设置缓冲区以提升下载速度。项目结构分为下载器、存储器和通知服务三部分,但具体在不同设备上的性能表现存在差异,如小米设备下载速度较慢。
摘要由CSDN通过智能技术生成

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

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值