流连续只读1分钟

时间:2017-03-09 15:29:59

标签: scala stream bufferedreader

如果Stream.continually的时间超过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

为什么会这样?

我可以使用某些属性更改此设置。

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

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

结论(调试此错误后)

这与Stream无关。它也与SSLSocketFactorySSLSocket无关。这是代理中的超时问题。我弄错了。

1 个答案:

答案 0 :(得分:3)

这实际上与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,给定一个空序列,将产生一个空字符串。