你怎么能让BufferedReader.readLine()不挂?

Cin*_*316 5 java bufferedreader

有没有办法让你BufferedReader.readLine()不挂?

我正在创建一个服务器:

  • 检查客户端是否已提供任何输入.
  • 如果没有,它会执行其他代码并最终循环回检查客户端的输入.

如何在不运行的情况下检查客户端是否已提供任何输入readLine()?如果我运行readLine(),线程将挂起,直到输入传递?

Cin*_*316 8

你可以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();
}
Run Code Online (Sandbox Code Playgroud)

ready()true如果输入源未将任何内容放入尚未读取的流中,则将返回.

编辑:只需一个注释,true即使只有一个字符存在,就会返回.您可以使用read()检查是否有换行符或回车符,这些将表示行尾.

有关更多信息:http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#ready()

  • 这不能保证下一次调用`read()`不会阻塞吗?该链接没有说明'readLine()`. (7认同)
  • 即使它已准备就绪,这只意味着至少有一个字节,不一定是整行.这并不一定适用于所有情况,尽管你可能会很幸运,它会对你正在做的事情起作用. (3认同)