如何检测"半下载" Java / Android

时间:2015-11-16 14:25:47

标签: java android

我试图在我的应用中处理某些文件的下载。基本上我在需要时下载文件并将其显示给用户。

我还想抓住下载的文件作为缓存,所以我在网址上使用哈希,当地图与现有文件冲突时,我认为它是缓存命中。

我的伪代码是:

String filename = hash(url);
File outputFile = new File(cacheFolder,filename);
if(!outputFile.exists()){
   download(url,outputFile);
}
return outputFile;

我用来从网址下载文件的代码是;

URL url = new URL(urlToDownload);
URLConnection connection = url.openConnection();
connection.connect();
// this will be useful so that you can show a typical 0-100% progress bar
int fileLength = connection.getContentLength();

// download the file
InputStream input = new BufferedInputStream(connection.getInputStream());
OutputStream output = new FileOutputStream(outputFile.getAbsolutePath());
byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
    total += count;
    output.write(data, 0, count);
}

output.flush();
output.close();
input.close();

它工作得很好但我在检测以下情况时遇到问题:

  • 应用程序开始下载文件,部分写入时,用户会杀死应用程序,导致输出文件处于不一致状态。
  • 用户重新打开应用程序,我检测到文件存在,但我无法检测到文件已损坏,所以我尝试打开文件,失败。

我该如何解决这个问题?

我应该在临时文件中下载并在完成时将其复制到outputFile吗?或者这可能会导致不必要的开销。

有没有办法避免在下载完成之前创建文件而不使用临时文件+复制方法?

由于

0 个答案:

没有答案