我想检查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);
}
}
答案 0 :(得分:0)
available()
可能会告诉您可用的字节的数量(如果已实现),但没有任何内容可以告诉您除了尝试读取之外是否还有完整的行它
您需要在单独的帖子中阅读。
问题是
readLine()
导致客户端因为客户端不允许访问而停止服务器回复。
所以问题实际上是服务器应该发送某些东西'如果客户端不允许访问,那就是这样说的消息,而不是做没有。您无法在阻塞I / O系统中将消息缺失用作消息。
您还需要检查每个 readLine()
结果是否为空,如果您在读取套接字时得到它,则需要将其关闭。
答案 1 :(得分:-1)
创建BufferedInputStream的新实例,并在该对象上调用:
InputStream is = ...;
BufferedInputStream bis = new BufferedInputStream(inputStream);
if (bis.available() == 0) {
// do sth if input is available
}
我尝试使用一个小型服务器客户端应用程序,它对我有用。
编辑:类型不匹配消失了。 正如Java Documentation所说,InputStream.available()总是返回零。与此相比,BufferedInputStream返回“the number of bytes remaining that can be read in the buffer”