我用scala编写了一个套接字程序,我想知道何时从服务器获得响应。以下是代码:
class Client(val id:Int) extends Runnable{
override def run(): Unit = {
val s = new Socket
val address = new InetSocketAddress("localhost",9977)
s.connect( address )
val lines = Source.fromInputStream(s.getInputStream).getLines()
lines foreach println // print result
println("%d connected" format id)
// lines foreach println // print result after
s.close
}
}但是,如果我不打印结果( lines foreach println)或稍后打印出来,println("%d connected" format id)将立即执行。
服务器端需要很长时间才能给出响应。不应该是即时的。我不知道为什么会这样?
它的值'lines‘是否懒惰地被评估?
我可以在执行以下代码之前计算“行”吗?
发布于 2014-10-16 03:07:29
您没有包含import语句,所以我猜您使用的是scala.io.Source。在这种情况下,scala.io.Source.fromInputStream(...).getLines()返回一个Iterator,迭代器是惰性的。这是签名:
def getLines(): collection.Iterator[String] 这实际上很好,因为如果收到大量数据,您可能不希望获得所有行。如果您想强迫它具体化,只需将迭代器转换为如下集合:
lines.toListhttps://stackoverflow.com/questions/26395500
复制相似问题