分批下载
思路 1. 第一次请求 获取 文件的总长度
-------2. 将文件 分为若干份
-------3.用Range请求头做标记
-------4.随机流进行操作(完成分批下载)
private void downFile(String url, final String path) {
Log.i("---", "downFile: 进入分批下载的方法");
final Request request = new Request.Builder()
.url(url)
.get()
.header("Range","bytes=0-"+number)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
InputStream inputStream = response.body().byteStream();
Buffer buffer = new Buffer();
int len = 0;
byte[] bys = new byte[1024];
RandomAccessFile rw = new RandomAccessFile(path, "rw");
rw.seek(0);
while ((len = inputStream.read(bys))!= -1){
rw.write(bys,0,len);
}
}
});
Request request1 = new Request.Builder()
.url(url)
.get()
.header("Range", "types=" + number + "-" + number * 2)
.build();
client.newCall(request1).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
InputStream inputStream = response.body().byteStream();
byte[] bys = new byte[1024];
int len = 0;
RandomAccessFile rw = new RandomAccessFile(path, "rw");
rw.seek(number);
while ((len = inputStream.read(bys,0,len))!=-1){
count +=len;
progress = (int) (len*100/length);
rw.write(bys,0,len);
}
}
});
Request request2 = new Request.Builder()
.url(url)
.get()
.header("Range", "types=" + number * 2 + "-" + length)
.build();
client.newCall(request2).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
InputStream inputStream = response.body().byteStream();
byte[] bys = new byte[1024];
int len = 0;
RandomAccessFile rw = new RandomAccessFile(path, "rw");
rw.seek(number*2);
while ((len = inputStream.read(bys))!=-1){
rw.write(bys,0,len);
}
}
});
}
本文介绍了一种分批下载大文件的策略,通过使用HTTP Range请求头,将文件分为多个部分进行下载,有效降低了网络延迟对下载速度的影响,提高了下载效率。
3177

被折叠的 条评论
为什么被折叠?



