BufferedReader.readLine()如何处理EOF或慢速输入?

时间:2016-04-12 09:58:57

标签: java bufferedreader

文档说:

  

readLine()阅读一行文字。一条线被认为是由换行符('\ n'),回车符('\ r')或回车符后面的任何一个终止。

这是否意味着,当输入中出现"hello"之类的内容时,readLine()将等到\n字符出现,或者能够识别EOF {1}}或其他什么?

在输入显示"Hello"和5秒后" world!"的情况下,函数会返回什么?

2 个答案:

答案 0 :(得分:3)

  

这是否意味着,当输入中出现类似“hello”的内容时,readLine()将等到\ n字符出现,或者是否能够识别EOF或其他内容?

它将一直等到接收到行终止符或流结束。如果收到了流的结尾,它将返回部分行,并在下次返回null

  

在输入显示“Hello”和5秒后“world!”的情况下,函数会返回什么?

  1. 如果您正在从套接字读取并且您将读取超时设置为短于5秒,则会抛出SocketTimeoutException
  2. 否则,如果EOL或EOS与“世界”一起出现!或者如果设置了读取超时,它将返回“Hello world!”。
  3. 否则会阻止。

答案 1 :(得分:2)

答案在文档中,尽管有些含蓄 -

  

public String readLine()                   抛出IOException;读   一行文字。一条线被认为是由换行符('\ n'),a中的任何一个终止   回车('\ r')或回车后立即回车   换行。返回:包含行内容的String, not   包括任何行终止字符,如果结尾则为null   已达到流

我认为这暗示你可以通过将null作为返回值来识别EOF。

这是另一个答案:

How to see if a Reader is at EOF?