【问题标题】:How does BufferedReader.readLine() handle EOF or slow input?BufferedReader.readLine() 如何处理 EOF 或慢速输入?
【发布时间】:2016-04-12 09:58:57
【问题描述】:

文档说:

readLine() 读取一行文本。行被视为由换行符 ('\n')、回车符 ('\r') 或回车符后紧跟换行符中的任何一种来终止。

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

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

【问题讨论】:

  • 您似乎问错了问题。你想做什么?你在读什么,它实现了什么协议?当你读到“你好”,然后是 5 秒什么都没有,然后是“世界!”时,你想做什么

标签: java bufferedreader


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    公共字符串 readLine() 抛出 IOException;读取 一行文字。一行被认为是由换行符('\n')中的任何一个终止,a 回车 ('\r'),或回车后紧跟 换行。返回:包含行内容的字符串,不是 包括任何行终止字符,或 null 如果 已到达流

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

    这是另一个答案:

    How to see if a Reader is at EOF?

    【讨论】:

      猜你喜欢
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2021-11-16
      • 2013-03-29
      • 2016-06-02
      相关资源
      最近更新 更多