为什么我可以在没有Eventlistener的情况下使用Java中的BufferedReader进行读取

时间:2012-01-03 16:43:25

标签: java android bufferedreader event-listener

我对动作脚本很满意。当我想在网络上访问网络时,我编写了请求并等待EventListener启动。

目前我正在使用以下android代码进行java教程(包含在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后立即进行,则在while-Construct启动时可能无法检索到该URL。

该应用程序是否在此期间暂停了?如果是,是否可以通过eventlistner实现这一点?

谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

每次请求提供数据时(BufferedReader或任何其他InputStream方法),reader.readLine()会向其基础readXXX请求数据。在BufferedReader)。因此InputStream有责任在那时提供它 - 这可能与否(例如,如果连接已关闭)。

在这种特殊情况下,InputStream提供的URLConnection将返回先前读取请求中缓存的数据,或者从其指向的URL请求更多数据。

因此,在readLine上调用BufferedReader之前,不会读取任何实际数据。您刚刚打开了与服务器的连接。

答案 1 :(得分:0)

  

该应用程序是否在此期间暂停了?

是。常规Java IO类是同步的。对readLine()的调用将会阻塞,直到它可以返回一行或者存在异常。

  

如果是,是否可以通过eventlistner实现这一目标?

是的,使用classes in the java.nio package。但只有较低级别的界面。

通常,Java应用程序使用多线程而不是事件qeueues来处理这种情况。