我有片段
try {
is = new BufferedReader(new inputStreamReader(getSocket().getInputStream()));
}
catch(IOException e) {}
while(true) {println(is.readLine());}
基本上,我要将每个发送到getSocket()返回的套接字输入流的消息打印出来。 我的问题是:
答案 0 :(得分:0)
while(true)
循环试图从流中读取该行。你不需要检查任何东西。如果插座在第二侧关闭,则读卡器正在读取null
。如果第二面在没有关闭套接字的情况下退出,则会得到IOException
。
答案 1 :(得分:0)
如果没有消息发送到套接字,调用readLine()方法返回什么值?它是空值还是空字符串(即“”)还是其他东西?
都不是。它会阻止。
当邮件已发送并已打印出来时,套接字的输入流会发生什么?它被清空了吗?
没有。收到的数据已从中删除。可能还有其他未决数据需要等待读取。
我们是否需要一种方法来检查只在输入流有打印输出时才调用println()方法?
没有。它会一直阻塞,直到收到一行,发生流结束或抛出IOException。
您的读取循环不正确。它不会检测到流的结束。通常的写作方式是:
while ((line = in.readLine()) != null)
// ...