基本的に私はウェブページのHTMLコンテンツをダウンロードしようとしています。方法は非常に簡単ですsocketRead0でスレッドがハングするJava
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
BufferReader in = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
String line;
StringBuilder pageBuilder = new StringBuilder();
while ((line = in.readLine()) != null) {
pageBuilder.append(line + "\n");
}
しかし時にはプログラムがハングすることがあります。私はデバッグしようとし、スレッドスタックトレースは、SocketRead0メソッドを呼び出すときにハングすることを通知します。接続のreadtimeoutを設定しようとしましたが、動作しません。どのように私はSocketRead0のブロックを検出して取得することができますか?
編集:私が実際に持っている問題は、getReponseCodeがいくつかのgetInputStreamといくつかのread()メソッドを暗黙的に呼び出してから、readSocket0()でハングするということです。とにかく、getReponseCode()の呼び出しが安全であることを確認できますか? は、ここに1つのスレッド吊りのスタックトレースです:レベル0は
thread 24stacktrace
At 0level
at method socketRead0
at line -2
At 1level
at method read
at line 129
At 2level
at method fill
at line 218
At 3level
at method read1
at line 258
At 4level
at method read
at line 317
At 5level
at method parseHTTPHeader
at line 687
At 6level
at method parseHTTP
at line 632
At 7level
at method getInputStream
at line 1200
At 8level
at method getResponseCode
at line 379
At 9level
at method pushFinalRedirectedURL
at line 132
At 10level
at method process
at line 134
At 11level
at method run
at line 40
このコードは、ダウンロードしたWebページを潜在的に改ざんする可能性があります。 InputStreamReaderを正しく設定するには、Webページの文字セットを使用する必要があります。 – jtahlborn