有没有办法使BufferedReader.readLine()
不挂?如何使BufferedReader.readLine()不挂起?
我创建一个服务器:
- 检查该客户端已交付的任何输入。
- 如果不是,它会执行其他代码并最终返回检查客户端的输入。
如何检查客户端是否已经交付任何输入而不运行readLine()
?如果我运行readLine()
,线程将挂起,直到输入交付?
有没有办法使BufferedReader.readLine()
不挂?如何使BufferedReader.readLine()不挂起?
我创建一个服务器:
如何检查客户端是否已经交付任何输入而不运行readLine()
?如果我运行readLine()
,线程将挂起,直到输入交付?
您可以使用BufferedReader.ready()
,像这样:
BufferedReader b = new BufferedReader(); //Initialize your BufferedReader in the way you have been doing before, not like this.
if(b.ready()){
String input = b.readLine();
}
ready()
将返回true
如果输入源尚未将任何东西放入尚未读取流。
编辑:只要一张纸条,即使只有一个字符存在,随时会返回true
。您可以使用read()
来检查是否有换行符或回车符,并且这些将指示行结束。
欲了解更多信息:http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#ready()
为什么?如果您使用阻止I/O,则服务器应该为每个客户端提供一个单独的读取线程。 – EJP 2013-03-19 21:48:41
我不想为每个用户创建两个线程。我已经为每个用户都有一个线程。 – Cin316 2013-03-19 22:06:16
这是Java I/O库的不幸现实。你可以是 1)分开读取线程 2)使用NIO库 3)不要使用readLine()并自己做自己的缓冲和行尾管理 – creechy 2013-03-19 22:22:41