分批下载
思路 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);
}
}
});
}