Java HttpURLConnection读取超时
我有以下代码下载文件表单URLJava HttpURLConnection读取超时,java,httpurlconnection,socket-timeout-exception,Java,Httpurlconnection,Socket Timeout Exception,我有以下代码下载文件表单URL HttpURLConnection urlConn = (HttpURLConnection)urlOfFile.openConnection(); urlConn.setConnectTimeout(5000); urlConn.setReadTimeout(10000); StatusInfo.fileSizeTobeDownload = urlConn.getContentLength(); InputStream reader = urlConn.ge
HttpURLConnection urlConn = (HttpURLConnection)urlOfFile.openConnection();
urlConn.setConnectTimeout(5000);
urlConn.setReadTimeout(10000);
StatusInfo.fileSizeTobeDownload = urlConn.getContentLength();
InputStream reader = urlConn.getInputStream();
FileOutputStream writer = new FileOutputStream(downloadFolder+fileName);
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = reader.read(buffer)) > 0) {
writer.write(buffer, 0, bytesRead);
buffer = new byte[1024];
StatusInfo.fileSizeDownloaded+=bytesRead;
}
writer.close();
reader.close();
此代码工作正常,但有时我会出现以下错误:
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:146)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:554)
at sun.security.ssl.InputRecord.read(InputRecord.java:509)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:850)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:807)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:94)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
at sun.net.www.MeteredStream.read(MeteredStream.java:134)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2582)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2577)
没有任何网络中断。是否有其他方法来配置“ReadTimeout”。这意味着服务器在ReadTimeout中没有响应,可能是服务器关闭或处理线程被阻塞,或者服务器太忙。这个问题没有意义。如果设置了读取超时,则会获得读取超时。如果您比预期的要快,请将其设置为更长。您需要的唯一“配置读取超时的其他方法”是更改超时值。这应该是什么,只有你知道,因为只有你知道你为什么要设置它。十秒钟对我来说确实太短了
注意:您不需要继续重新创建读取缓冲区。你只是在制造大量垃圾。我不确定,但可能是你的互联网速度太低,或者可能需要时间来响应。我们的速度很快,我试图同时从3-4台机器上下载,但在一台机器上失败,并且每次重试都失败,一段时间后它被成功下载。我正在测试时运行ping到8.8.8.8,没有ant插拔ping错误发生在我身上。10秒的持续时间足以看到ping下降。我认为我在很短的时间内得到了超时,因为即使ping没有失败。ping失败或没有失败与此无关。这与服务器的响应速度有关。你只允许10秒钟。它太短,如果“服务器已关闭”,则不会出现此异常。