我使用下面的代码下载文件:
URL u = new URL(one.getSrcPath());
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.setReadTimeout(10000);
c.connect();
int lenghtOfFile = c.getContentLength();
FileOutputStream f = new FileOutputStream(new File(Environment.getExternalStorageDirectory() + "/" + SavePath, FileName);
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
int finishbyte = 0;
long total = 0;
while((len1 = in.read(buffer)) > 0) {
total += len1; //total = total + len1
f.write(buffer, 0, len1);
finishbyte++;
}
f.close();
我有两个问题: 首先,为什么我的下载任务下载失败率非常高? 其次,如果我希望我的下载任务从断点恢复。 我得到了终点。 我该如何修改?
答案 0 :(得分:1)
答案 1 :(得分:1)
finishbyte
两者都不代表任何信息(除了read
方法的调用次数,但肯定不是下载文件的大小),并且不相关,因为您已写入一个文件,可以使用File.length()方法知道你到目前为止有多少。
打开文件,检查大小,使用http标头请求范围:
Range: <file.length()>-
(例如,如果您已经下载了234个字节:
Range: 234-
如果来自服务器的响应代码是206 Partial Content,您可以附加到您的文件,如果是200,则必须覆盖您的文件(内容已更改或不支持Range)