0

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

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 的文件大小我获得了很好的成功率,但文件大小较高的状态总是不完整的。

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

4

1 回答 1

0

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

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

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

于 2012-07-25T20:59:02.550 回答