我想检查InputStream缓冲区是否包含可以读取和输出的任何数据,而无需最初调用readLine()
并等待数据。
我已经研究了 available()
,但这似乎并没有起作用,因为它总是输出0。
while (true)
{
fromServer = in.readLine(); //Causing a hang waiting for reply
System.out.println(fromServer);
if ((fromUser = stdIn.readLine()) != null)
{
out.println(fromUser);
fromServer = in.readLine();
System.out.println(fromServer);
}
}
available()
可能会告诉您 bytes 可用的数量,如果实现了,但是没有什么可以告诉您是否有一个完整的 line 其他而不是试图阅读它。
您需要在单独的线程中阅读。
问题是
readLine()
导致客户端挂在服务器上,如果客户不允许访问访问。
因此,问题实际上是因为服务器应该发送某物'如果不允许客户访问',即表示这样的消息,而不是什么都不做。您不能将缺少消息用作阻塞I/O系统中的消息。
您还需要检查 null的每个 readLine()
结果,如果您在阅读插座时获得它。
创建一个bufferedInputStream的新实例,并在该对象上可用:
InputStream is = ...;
BufferedInputStream bis = new BufferedInputStream(inputStream);
if (bis.available() == 0) {
// do sth if input is available
}
我使用一个小服务器客户应用程序尝试了它,它对我有用。
编辑:输入不匹配消失。正如Java文档所说,InputStream.available() emwly 返回零。与此相比,BufferedInputStream返回„剩下的字节数可以在缓冲区中读取"