gpt4 book ai didi

Android:下载大文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:18 25 4
gpt4 key购买 nike

我正在尝试从 Internet 下载大文件 (>20Mb)

private class DownloadTask extends AsyncTask<DatabaseInfo, Integer, String> {

private DatabaseInfo info;

protected String doInBackground(DatabaseInfo... dbInfo) {

int count;
info = dbInfo[0];

try {

URL url = new URL(dbInfo[0].dbPath);

InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream("/sdcard/db.zip");

byte data[] = new byte[1024];
int total = 0;

while ((count = input.read(data)) != -1) {

//output.write(data, 0, count);

total += count;

if (total % 10240 == 0) {
publishProgress(total);
}
}

output.flush();
output.close();
input.close();
}
catch (Exception e) {
Log.e("err", e.getMessage());
}

return null;
}

protected void onProgressUpdate(Integer... total) {

int perc = (int) ((float) total[0] / (float) info.dbZipSize * 100);
mProgressDialog.setProgress(perc);
}

protected void onPostExecute(String s) {

dismissDialog(DIALOG_PROGRESS);
Log.e("err", "finish!");
}
}

如果我取消注释行

//output.write(data, 0, count);

下载完成 7-15% 后,进度条对话框关闭,我看到“完成!”在日志中。为什么?

最佳答案

您应该考虑实现 HTTP 范围。这将允许您在下载失败时重新开始下载。

至于停止的原因,一些运营商实现下载限制,这将在特定时间或下载量后断开连接。我在一家英国航空公司亲眼目睹了这一点,并在其他航空公司得知了这一点。通过尝试通过 Android 浏览器下载文件来验证限制通常很容易,如果您看到它停滞或停止,您就知道这很可能是运营商问题(是的,下载可以终止而不会抛出异常)。

Http Range 实现将允许您从中断的地方继续下载,因此您的 doInBackground 方法使用延迟和恢复算法,以便每次连接中断时您等待一段时间,然后尝试从中断的地方继续下载(当然,实现重试限制,这样当手机真的无法下载文件时,您就不会陷入无限循环)。

关于Android:下载大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2635786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com