![](/img/trans.png)
[英]Why if we want to zip a file in java we use BufferedInputStream rather than BufferedReader?
[英]Can I use Java's BufferedReader with an event listener rather than while(true)?
我正在编写Java客户端和服务器,它们都在正确地相互通信。 但是,目前,客户端必须始终向服务器发送消息,然后才能接收到消息-但我希望服务器能够在客户端不要求的情况下发送消息。
在我的主要语言AS3中,我已经向套接字添加了一个事件侦听器,并以这种方式处理了数据-但是我似乎找不到我将如何在Java中做到这一点。
目前,我的客户中包含以下代码:
public String send(String message) {
out.println(message);
try {
return in.readLine();
} catch (IOException ex) {
return "";
}
}
基本上,我通过传递消息来调用它,然后返回给我服务器的响应。 与其执行此操作,不如在此向我发送一条消息,如下所示,并在不同的地方(由事件侦听器)接收响应。
public void send(String message) {
out.println(message);
}
由于无法弄清事件监听器的工作原理,我曾考虑过使用单独的线程来运行while(true){in.readLine;}
但我想尽可能避免这种情况。 我对线程不太满意,我想使其尽可能简单。
最简单的方法是使用线程。 我将至少有一个线程读取套接字,该线程允许服务器随时向客户端发送消息。
响应和事件混合的问题在于您的第一个程序段将不起作用,因为“响应”可能是事件。
如果您不想使用线程,则可能会遇到类似
// simple but probably not a good idea.
public String send(String message) {
out.println(message);
try {
while(true) {
String line = in.readLine();
if (isEvent(line))
processEvent(line);
else
return line;
} catch (IOException ex) {
return "";
}
}
但是,它将仅在发送请求时读取事件,如果不定期执行此操作,则可能导致流完全阻塞到服务器的整个路径,并导致其也被阻塞。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.