Stream Continually 只读取 1 分钟

Stream Continually only reads for 1 minute

Stream.continually returns 空字符串如果 in.readLine 花费的时间比 1 minute

val f = SSLSocketFactory.getDefault.asInstanceOf[SSLSocketFactory]
val s = f.createSocket(ip, port).asInstanceOf[SSLSocket]
 s.startHandshake()
 s.setTcpNoDelay(true)
 val out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream))
 val in  = new BufferedReader(new InputStreamReader(s.getInputStream))

 val in  = new BufferedReader(new InputStreamReader(s.getInputStream))    
 Stream.continually(in.readLine()).takeWhile(_ != null).mkString

为什么会这样?

我可以用一些 属性 来改变这个吗?

我已经浏览了整个 Stream 文档,但我想我可能遗漏了一些东西。

我也试过添加 s.setSoTimeout(300000) 我还阅读了 SSLSocketFactory 的官方文档,但找不到任何默认超时。也没有找到 SSLSocket


结论(调试此错误后)

这与 Stream 无关。它也与 SSLSocketFactorySSLSocket 没有任何关系。这是代理中的超时问题。我完全弄错了。

这实际上与Stream无关。尝试从您的代码中取出 Stream

val ip = "74.125.141.147" // google
val port = 443

val f = SSLSocketFactory.getDefault.asInstanceOf[SSLSocketFactory]
val s = f.createSocket(ip, port).asInstanceOf[SSLSocket]
s.startHandshake()
s.setTcpNoDelay(true)

val out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream))
val in  = new BufferedReader(new InputStreamReader(s.getInputStream))

println {
  in.readLine()
}

这最终会打印出 null,这是应该的(我认为当遥控器感到无聊并挂断时)。

发生的事情是 mkString,给定一个空序列,将生成一个空字符串。