android分段加载_Android 多线程分段下载文件

下文中所用到的依赖:implementation 'com.squareup.retrofit2:retrofit:2.1.0',虽然用的retrofit的包,但是只用了里面的okhttp部分,因为是demo项目,原先就已经加了依赖了,不方便换了。现在我们开始多线程分段下载一个大文件,用的是服务上一个apk文件(23M,假设是大文件)开工,ps:网络权限,文件读写权限,别忘了1. 既然是多线程下载...
摘要由CSDN通过智能技术生成

下文中所用到的依赖:implementation 'com.squareup.retrofit2:retrofit:2.1.0',虽然用的retrofit的包,但是只用了里面的okhttp部分,因为是demo项目,原先就已经加了依赖了,不方便换了。

现在我们开始多线程分段下载一个大文件,用的是服务上一个apk文件(23M,假设是大文件)

开工,ps:网络权限,文件读写权限,别忘了

1. 既然是多线程下载,先建立一个线程池

ExecutorService executorService = Executors.newFixedThreadPool(5);

2. 确认下载文件的大小

OkHttpClient client = createOkHttpClient();

final Request request = new Request.Builder()

.url(url)

.head()//这里注意请求方式为head

.build();

try {

Response response = client.newCall(request).execute();

httpResponseCall.onResponseSuccess(response);

} catch (IOException e) {

e.printStackTrace();

}

因为本身是线程调用的,这里网络请求就用同步了,request请求方式为head,只要获取文件大小就好了,然后在请求返回的head中获取文件大小

long length = Long.parseLong(response.header("content-length"));//获取文件长度

long count = length / M + 1;//下载次数 M = 1024 * 1024 * 5,M为一次下载多少长度,这里为5mb

for (int i = 0; i < count; i++) {

long start, end;//每次一次下载的初始位置和结束位置

if (i == count - 1) {

end = length - 1;//因为从0开始的,所以要-1,比如10个字节,就是0-9

} else {

end = (i + 1) * M - 1;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值