4

ファイルフォームURLをダウンロードするための次のコードがあります

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」を構成する他の方法はありますか。

4

2 に答える 2

1

質問は意味がありません。読み取りタイムアウトを設定すると、読み取りタイムアウトが発生します。思ったよりも早く取得した場合は、より長く設定してください。必要な唯一の「読み取りタイムアウトを構成する他の方法」は、タイムアウト値を変更することです。なぜそれを設定しているのかはあなただけが知っているので、それがどうあるべきかはあなただけが知っています。10秒は私には短すぎるように思えます。

NB 読み取りバッファを再作成し続ける必要はありません。大量のゴミを作っているだけです。

于 2013-03-16T06:58:43.173 に答える
0

これは、サーバーがReadTimeoutで応答されないことを意味します。おそらく、サーバーが閉じているか、処理スレッドがブロックされているか、サーバーがビジー状態です。

于 2013-03-16T04:52:10.620 に答える