Java Android URLConnection read()异常由对等方重置连接
我正在编写Android应用程序,以便从网站下载特定文件(目前为2000万字节),用于测试目的。我使用URLConnection和BufferedInputStreamJava Android URLConnection read()异常由对等方重置连接,java,android,httpurlconnection,urlconnection,Java,Android,Httpurlconnection,Urlconnection,我正在编写Android应用程序,以便从网站下载特定文件(目前为2000万字节),用于测试目的。我使用URLConnection和BufferedInputStream 下载数兆字节后,我收到对等方重置的IOException连接。 inputStream.read()暂停约130秒,然后引发异常。 通过几次尝试,我注意到下载的字节不是11272192就是11010048,因为我知道该文件可以从PC正常下载。 以下是我使用的代码片段: @Override protected String
下载数兆字节后,我收到对等方重置的IOException连接。
inputStream.read()暂停约130秒,然后引发异常。
通过几次尝试,我注意到下载的字节不是11272192就是11010048,因为我知道该文件可以从PC正常下载。
以下是我使用的代码片段:
@Override
protected String doInBackground(String... f_url) {
try {
URL url = new URL(f_url[0]);
HttpURLConnection conection = (HttpURLConnection) url.openConnection();
conection.setConnectTimeout(5000);
conection.setReadTimeout(5000);
conection.setDoOutput(false);
conection.connect();
// input stream to read file - with 8k buffer
InputStream input = new BufferedInputStream(url.openStream(), 8192);
...
do {
byte data[] = new byte[1024];;
if (((count = input.read(data)) == -1)) {
break;
}
sum+=count;
...
} while (true);
input.close();
conection.disconnect();
} catch (Exception e) {
...
}
return null;
}
我想知道是什么导致了这个问题,以及如何避免它。我读了多个(类似主题)的问题,但没有一个有帮助。他们都同意代码没有问题,这是网络(或主机)问题。但是我需要知道下载失败的原因以及如何克服它
知道
- 我把同一个文件移到了不同的主机上,有相同的问题
- 下载从未在不同的时间成功
data=new byte[dataCount]代码>。您正在创建11MB的缓冲区吗?为了什么?11MB只有一个read()?之后你打算怎么处理缓冲区?input.available()
是否经常传递错误的值?您检查过服务器上的文件大小是否相等吗?如果您确实可以在一次读取()中读取dataCount
字节,那么如果count==dataCount
代码没有问题,您应该中断循环。代码看起来不太好。我最近添加了input.available(),作为一种尝试,但没有成功。代码总体上没有问题,但有一些东西让下载中断。我没有分配11MB的缓冲区,但下载中断约11MB。我更新了代码以避免混淆。input.available()不返回filesize,而是返回缓存(或提取)字节,它是KB的倍数,不超过65k(调试时注意到),但有时返回0。所以我把它拿走了。