Android中的一些下载麻烦

时间:2012-03-22 08:05:01

标签: android download

我使用下面的代码下载文件:

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();

我有两个问题: 首先,为什么我的下载任务下载失败率非常高? 其次,如果我希望我的下载任务从断点恢复。 我得到了终点。 我该如何修改?

2 个答案:

答案 0 :(得分:1)

要开始下载以finishbyte位置开头的文件,您必须使用Range HTTP标头。至于失败的下载问题,可能是网络问题或手机睡眠问题,在这种情况下你应该查看wifi lock

答案 1 :(得分:1)

finishbyte两者都不代表任何信息(除了read方法的调用次数,但肯定不是下载文件的大小),并且不相关,因为您已写入一个文件,可以使用File.length()方法知道你到目前为止有多少。

要恢复下载:

打开文件,检查大小,使用http标头请求范围:

Range: <file.length()>-

(例如,如果您已经下载了234个字节:

Range: 234-

如果来自服务器的响应代码是206 Partial Content,您可以附加到您的文件,如果是200,则必须覆盖您的文件(内容已更改或不支持Range)