在Android上检测文件下载完成状态

时间:2012-07-25 20:48:14

标签: java android io

我正在使用以下代码从服务器下载文件

conn=url.openConnection();
bytesTotal=conn.getContentLength();    
in= new BufferedReader(new InputStreamReader(conn.getInputStream()));

while (true){
    byteFromStream=in.read(buffer);
    if (byteFromStream==-1) break;
    bytesLoaded=bytesLoaded+byteFromStream;
}

所以我基本上计算下载的字节数并将其与bytesTotal匹配。

最后,如果bytesTotoal与bytesLoaded不同,我说下载状态不完整。

问题在于12 KB的文件大小我获得了很好的成功率但是文件大小更高的状态总是不完整。

是他们可以确定我的下载状态的任何其他方式。

1 个答案:

答案 0 :(得分:0)

也许你被这个击中了(引自HttpURLConnection文档):

  

默认情况下,HttpURLConnection的此实现请求服务器使用gzip压缩。由于getContentLength()返回传输的字节数,因此您无法使用该方法来预测可从getInputStream()读取的字节数。相反,读取该流直到它耗尽:当read()返回-1时。可以通过在请求标头中设置可接受的编码来禁用Gzip压缩:

urlConnection.setRequestProperty("Accept-Encoding", "identity");