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