Возможно, проблема в том, что конец ответа сервера не содержит символа новой строки.Метод readLine
в BufferedReader будет блокироваться до тех пор, пока не будет получена строка данных, где «строка» состоит из нескольких символов , за которыми следует символ новой строки (или конец потока).Следовательно, вызов readLine не вернется, если новая строка не получена.
В этом случае BufferedReader не приносит вам никакой пользы.Было бы лучше, если бы вы сами использовали базовый Reader, читая в массив и выдавая вывод, как только он поступил, например:
final char[] buffer = new char[256]; // or whatever size you want
int nRead;
while ((nRead = reader.read(buffer)) != -1)
{
System.out.println(new String(buffer, 0, nRead));
System.out.flush();
}
Условие в цикле while
может показаться запутанным, если вы не привыкли к нему раньше, но он объединяет операцию чтения (которая читает в буфер) с проверкой того, что конец потока не достигнут.Аналогично, конструкция String
внутри цикла while учитывает тот факт, что буфер, возможно, не был заполнен не полностью, поэтому используется только столько символов, сколько было предоставлено.
Обратите внимание, что этот конкретный фрагментпродолжает цикл, пока поток не станет пустым;Вы можете добавить еще одно условие выхода в вашем конкретном случае.