java 下载支持断点续传服务端_RxDownload-基于RxJava打造的下载工具, 支持多线程和断点续传...

RxDownload是一个基于RxJava的下载工具,支持多线程和断点续传。它使用Retrofit+OKHTTP进行网络请求,通过Java NIO的MappedByteBuffer进行高效读写,提供下载状态跟踪,并支持自定义最大线程数和重试次数。项目提供了详细的使用教程和API,方便开发者集成到自己的应用中。
摘要由CSDN通过智能技术生成

项目地址

效果图

9efef61e9c72c32c4695982bcbf7477f.gif

大文件下载测试

c10d46fb2274876b090c97aa7b74bb47.gif

内存占用图:

01edc541b2b88e27254f1133ba6927d9.png

大文件下载测试中,内存占用一直趋于平稳

主要功能:使用Retrofit+OKHTTP来进行网络请求

基于RxJava打造, 支持RxJava各种操作符链式调用

若服务器支持断点续传, 则使用多线程断点下载

若不支持断点续传,则进行传统下载

多线程下载, 可以设置最大线程, 默认值为3线程

网络连接失败自动重连, 可配置最大重试次数, 默认值为3次

利用Java NIO 中的 MappedByteBuffer内存映射进行高效读写文件

流式下载,再大的文件也不会造成内存泄漏

支持根据Last-Modified字段判断服务端文件是否变化

与服务器进行验证过程中,使用更轻便的HEAD请求方式仅获取响应头,减轻通信数据量

下载流程图

ff97069fa61256dd69b3720ee1c7de70.png

使用方式

1.添加Gradle依赖

68747470733a2f2f6170692e62696e747261792e636f6d2f7061636b616765732f7373736561736f6e6e6e2f616e64726f69642f5278446f776e6c6f61642f696d616765732f646f776e6c6f61642e737667dependencies{

compile 'zlc.season:rxdownload:1.1.1'

}

2.代码调用Subscription subscription = RxDownload.getInstance()

.download(url, "weixin.apk", null)

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new Subscriber() {

@Override

public void onCompleted() {

}

@Override

public void onError(Throwable e) {

}

@Override

public void onNext(final DownloadStatus status) {

}

});download(String url, String saveName, String savePath)参数说明:

参数分别为下载地址,保存文件名,保存地址.

url与saveName为必传参数, savePath为可选参数, 默认的下载地址为/storage/emulated/0/Download/目录下, 也就是内置存储的Download目录

3.参数配置

可以配置的参数如下:Subscription subscription = RxDownload.getInstance()

.maxThread(10)     //设置最大线程

.maxRetryCount(10) //设置下载失败重试次数

.retrofit(myRetrofit)//若需要自己的retrofit客户端,可在这里指定

.defaultSavePath(defaultSavePath)//设置默认的下载路径

.download(url,savename,savepath) //开始下载

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new Subscriber() {

@Override

public void onCompleted() {

}

@Override

public void onError(Throwable e) {

}

@Override

public void onNext(DownloadStatus status) {

//Status表示的是当前的下载进度

}

});

4.DownloadStatus 下载状态class DownloadStatus {

private long totalSize;

private long downloadSize;

public boolean isChunked = false;

//...

//返回文件总大小,单位为byte

public long getTotalSize() {}

//返回已下载总大小,单位为byte

public long getDownloadSize() {}

//返回格式化的总大小,如:10MB

public String getFormatTotalSize() {}

//返回格式化的已经下载的大小,如:5KB

public String getFormatDownloadSize() {}

//返回格式化的状态字符串,如:2MB/36MB

public String getFormatStatusString() { }

//返回下载的百分比, 保留两位小数,如:5.25%

public String getPercent() {}

}

5.取消或暂停下载Subscription subscription = RxDownload.getInstance()

.download(url, null, null)

//...//取消订阅, 即可暂停下载, 若服务端不支持断点续传,下一次下载会重新下载,反之会继续下载

if (subscription != null && !subscription.isUnsubscribed()) {

subscription.unsubscribe();

}

6.更多功能后续将会逐步完善

若您对此项目有疑问,欢迎来提issues.

关于我

若您想对该项目来进行交流,可以通过以下方式:

QQ : 270362455

LicenseCopyright 2016 Season.Zlc

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值