次のスニペットを考えてみましょう:
URLConnection connection = target.openConnection();
connection.setConnectTimeout(5000); // 5 sec
connection.setReadTimeout(10000); // 10 sec
connection.setReadTimeout
読み取りデータの開始に使用できる最大時間を設定しますか、それとも読み取りデータの完了に使用できる最大時間ですか?
私の理解はそれで、Javaは接続からデータの次のバイトの読み取りを開始するまでに10秒あります。接続からのすべてのデータの読み取りを終了するためのタイムアウトはありません。ストリアンは大きいかもしれません。
Oracleのドキュメントによると、読み取りタイムアウト期間に使用できるデータがない場合、例外がスローされる可能性があります
データが読み取り可能になる前に読み取りタイムアウトが期限切れになると、返された入力ストリームから読み取るときにSocketTimeoutExceptionがスローされることがあります。
読み取りデータを「開始」するためのものです。タイムアウトは、着信データの待機時間の長さを制限するためにあります。読み取り可能なデータがある場合、タイムアウトは適用されません。
「タイムアウトが期限切れになる前に読み取り可能なデータがある場合、Java.net.SocketTimeoutException
が発生します。」
要するに-あなたの理解は正しいです。
あなたが正しいです! connection.setReadTimeout
読み取りが完了したことを意味するのではなく、10秒間待機して、データが読み取られなくなったときに、timeoutexceptionがスローされることを意味します。