Вопрос по java – Блоки HttpURLConnection.getInputStream ()

8

Я использую класс HttpURLConnection для выполнения http-запросов. Мой код выглядит примерно так:

while(true){
    try{
         connection=(HttpURLConnection)url.openConnection();
         connection.setDoOutput(true);
         connection.setConnectTimeout(2*1000);
         InputStream in=connection.getInputStream();
    }
    catch(SocketTimeOutException e){}
    catch(IOException e){}
}

Я выполняю некоторую обработку данных после извлечения объекта InputStream. Моя проблема в том, что, если я позволю программе работать достаточно долго, вызов getInputStream блокируется, и я никогда не могу этого избежать.

 Я что-то пропустил? Любые указатели или помощь будет принята с благодарностью. Благодарю.

@artbristol, что ты пытаешься сказать ... это из нашего производственного кода :) Gareth Davis
@ GarethDavis- Ох. Да. Виноват. Я исправил это в своем коде. Спасибо что подметил это! :) Sandman
Никогда не делай такого рода вещиcatch(SocketTimeOutException e){} вwhile(true) петля. Это сделает очень трудным отладку или остановку вашей программы изящно. artbristol
Помимо того, что @artbristol говорит, вы пытались закомментироватьconnection.setDoOutput(true) так как это означает, что он ожидает, что вы позвонитеconnection.getOutputStream() и напиши что-нибудь в теле Http Gareth Davis
Привет @ artbristol- Спасибо за ваш комментарий. Что было бы хорошим способом структурировать этот код тогда? Мое требование состоит в том, чтобы мне было все равно, какое исключение происходит. Я просто продолжаю читать данные из URL, и когда я получаю некоторые данные, я использую их. Sandman

Ваш Ответ

2   ответа
7

Кроме того, закройте потоки в блоке finally, как только вы закончите с ними.

Error: User Rate Limit Exceeded Sandman
Error: User Rate Limit Exceeded
1


connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.setReadTimeout(2*1000);
connection.connect();
reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
stringBuilder = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{
 stringBuilder.append(line + "\n");
}
String result = stringBuilder.toString();
reader.close();
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Sandman

Похожие вопросы