读取套接字的输入流

时间:2016-10-08 09:33:27

标签: java sockets stream readline

我有片段

try {
    is = new BufferedReader(new inputStreamReader(getSocket().getInputStream()));
}
catch(IOException e) {}
while(true) {println(is.readLine());}

基本上,我要将每个发送到getSocket()返回的套接字输入流的消息打印出来。 我的问题是:

  1. 如果没有消息发送到套接字,则返回什么值 从调用readLine()方法?是null值还是null 字符串(即“”)还是别的什么?
  2. 当有消息时 已发送并已打印出来,输入流发生了什么 那个插座呢?它被清空了吗?
  3. 我们需要一种方法来检查 仅在输入流HAS时才调用println()方法 打印出来的东西?

2 个答案:

答案 0 :(得分:0)

  1. 如果没有通过流发送任何内容 - 还没有什么可读的。你的读者只是在等待。
  2. 仅从您收到的数据中清空。
  3. 你应该有while(true)循环试图从流中读取该行。你不需要检查任何东西。
  4. 如果插座在第二侧关闭,则读卡器正在读取null。如果第二面在没有关闭套接字的情况下退出,则会得到IOException

答案 1 :(得分:0)

  

如果没有消息发送到套接字,调用readLine()方法返回什么值?它是空值还是空字符串(即“”)还是其他东西?

都不是。它会阻止。

  

当邮件已发送并已打印出来时,套接字的输入流会发生什么?它被清空了吗?

没有。收到的数据已从中删除。可能还有其他未决数据需要等待读取。

  

我们是否需要一种方法来检查只在输入流有打印输出时才调用println()方法?

没有。它会一直阻塞,直到收到一行,发生流结束或抛出IOException。

您的读取循环不正确。它不会检测到流的结束。通常的写作方式是:

while ((line = in.readLine()) != null)
    // ...