我想向服务器发送命令,并确定是否收到响应。
现在,我正在使用BufferedReader
的readline()
函数,该函数将阻塞直到服务器发出响应,但我要做的只是首先验证服务器是否响应。
我尝试使用ready()
或reset()
来避免此阻止,但这没有帮助。
这导致我的程序在等待服务器响应时陷入困境,这永远不会发生。根据我对事物的理解,InputStreamReader
似乎也做同样的事情。
我在此处找到的关于该主题的其他问题没有回答我的问题,因此,如果您能回答我的问题,那就太好了。
也许您只需要InputStream
而无需将其包装在BufferedReader
中
如果要异步读取响应,我建议启动一个读取BufferedReader的线程。这更容易编码,更易于控制。
最近我使用CountDownLatch做了类似的事情。可能有一些更好的方法,但这很简单,并且似乎工作得很好。您可以调整CountDownLatch的等待时间以适合您的需求。
如果您使用标准的Java IO,这是一项棘手的任务,不会被阻塞。常见的答案是迁移到NIO或Netty。净值是更可取的选择。但是有时候您别无选择,所以我建议您尝试一下我的解决方法: