我对动作脚本很满意。当我想在网络上访问网络时,我编写了请求并等待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实现这一点?
谢谢你的帮助!
答案 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来处理这种情况。