Я пытаюсь прочитать текст из веб-документа, используя BufferedReader через InputStreamReader по URL-адресу (к файлу на каком-то сервере Apache).BufferedReader, не заявляющий «готов», когда он должен
String result = "";
URL url = new URL("http://someserver.domain/somefile");
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(url.openStream(), "iso-8859-1"));
result += in.readLine();
Теперь это работает отлично. Но, очевидно, я бы хотел, чтобы читатель не просто читал одну строку, а столько, сколько в файле.
Глядя на BufferedReader API следующий код должен делать только что:
while (in.ready()) {
result += in.readLine();
}
Т.е. прочитайте все строки, пока есть больше строк, остановитесь, когда больше нет линий. Этот код не работает, однако - читатель просто никогда сообщает ready() = true!
Я могу даже напечатать значение ready() прямо перед чтением строки (которая читает правильную строку из файла), но читатель сообщит «false».
Я что-то не так? Почему BufferedReader возвращает «false» на готовность, когда на самом деле есть что читать?
Я не знаю, имеет ли это значение, но URL-адрес фактически указывает на местоположение с использованием HTTPS. Однако сертификаты устанавливаются правильно на сервере и на машине, на которой выполняется вышеуказанный код. Также readLine() возвращает первую строку без проблем. – fgysin
Он будет готов, когда есть ожидающие данные, однако у него не будет ожидающих данных, пока вы не выполните чтение/чтение. Даже если есть ожидание данных, это может быть не полная строка, поэтому readLine() будет блокировать в любом случае. –
Lotta отличные ответы, thx каждый. К сожалению, я могу отметить только один признанный ответ. :) – fgysin