Próbuję odczytać tekst z dokumentu internetowego za pomocą BufferedReader przez InputStreamReader pod adresem URL (do pliku na serwerze Apache).Buforowany czytnik nie podał "gotowości", gdy powinien:
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();
Teraz działa dobrze. Ale oczywiście chciałbym, żeby czytelnik nie przeczytał tylko jednej linii, ale tyle, ile jest w pliku.
Patrząc na API BufferedReader następujący kod powinien zrobić tylko, że:
while (in.ready()) {
result += in.readLine();
}
Tj przeczytaj wszystkie linie, gdy jest więcej linii, zatrzymaj się, gdy nie ma już linii. Ten kod nie działa jednak - czytnik tylko nigdy raportów ready() = true!
Mogę nawet wydrukować wartość ready() tuż przed odczytaniem linii (która odczytuje poprawny ciąg z pliku), ale czytnik zgłosi "false".
Czy robię coś nie tak? Dlaczego BufferedReader zwraca "fałsz" w stanie gotowym, gdy rzeczywiście jest coś do odczytania?
Nie wiem, czy to ma znaczenie, ale adres URL faktycznie wskazuje na lokalizację za pomocą HTTPS. Certyfikaty są jednak poprawnie zainstalowane na serwerze i na komputerze, na którym działa powyższy kod. Również readLine() zwraca pierwszą linię bez problemów. – fgysin
Będzie on gotowy, gdy będą dane oczekujące, ale nie będzie miał danych oczekujących, dopóki nie wykonasz odczytu/readLine. Nawet jeśli są dane oczekujące, może to nie być kompletna linia, tak więc readLine() i tak się zablokuje. –
Lotta wspaniałe odpowiedzi, thx każdy. Niestety mogę tylko oznaczyć jedną jako zaakceptowaną odpowiedź. :) – fgysin