Почему я могу читать с BufferedReader на Java без Eventlistener - PullRequest
0 голосов
/ 03 января 2012

Мне комфортно с actioncript.Когда я хочу получить доступ к сети, например, в эфире, я закодировал запрос и ждал, пока EventListener включится.

В данный момент я делаю учебник по Java со следующим кодом Android (завернутым вtry / catch):

url = new URL("http://www.google.com");
URLConnection conn = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream());
String line = '';
while((line = reader.readLine()) != null) {
     // do something with the line
}

Я не понимаю, как это работает.

Почему не требуется EventListener?Если код продолжает работать сразу после запроса URL-адреса, URL-адрес может не быть получен при запуске while-Construct.

Не приостановлено ли пока приложение?Если да, возможно ли реализовать это с помощью Eventlistner?

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 03 января 2012

Является ли приложение тем временем приостановленным?

Да.Обычные классы Java IO являются синхронными.Вызов readLine() будет блокироваться до тех пор, пока он не сможет вернуть строку или возникнет исключение.

Если да, возможно ли это реализовать с помощью Eventlistner?

Да, используя классы в пакете java.nio .Но только с несколько более низким уровнем интерфейса.

В общем случае приложения Java используют многопоточность вместо очередей событий, чтобы справиться с такими ситуациями.

0 голосов
/ 03 января 2012

В результате BufferedReader будет запрашивать данные, лежащие в основе InputStream, каждый раз, когда ему будет предложено предоставить данные (когда вы вызываете reader.readLine() или любой другой метод readXXX в BufferedReader).Таким образом, InputStream несет ответственность за предоставление этого в то время - что может быть возможным или нет (например, если соединение было закрыто).

В этом конкретном случае InputStream, предоставленный URLConnection, будет либо возвращать данные, которые были кэшированы в предыдущем запросе на чтение, либо запрашивать дополнительные данные с URL-адреса, на который он указывает.

Таким образом, никакие фактические данные не читаются, пока вы не вызовете readLine на BufferedReader.Вы только что открыли соединение с сервером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...