2017-03-09 4 views
2

Stream.continually kehrt leer String wenn in.readLine länger dauert als 1 minuteStream-Kontinuierlich liest nur für 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 

Warum geschieht das?

Kann ich dies mit einer Eigenschaft ändern.

Ich habe die gesamte Stream-Dokumentation durchgesehen, aber ich denke, dass mir etwas fehlen könnte.

Ich habe auch versucht, das Hinzufügen s.setSoTimeout(300000) Auch las ich die offizielle Dokumentation für SSLSocketFactory aber keinen Standard TimeOut finden kann. Auch fand nicht für SSLSocket


FAZIT (nach diesen Fehler debuggen)

Das hat nichts mit Strom zu tun. Es hat auch nichts mit SSLSocketFactory oder SSLSocket zu tun. Es war ein Timeout-Problem im Proxy. Ich habe alles falsch verstanden.

+0

Was ist 's'? Ein etwas vollständigeres Beispiel wäre einfacher auszuprobieren. –

+0

@Michael, Ich habe den kompletten Code hinzugefügt – orange14

+0

Ich glaube nicht, dass es ein 'Stream' Problem ist. Wenn Sie 'Stream.continually (io.StdIn.readLine) ...' von der REPL aufrufen, wird es unbegrenzt warten. – jwvh

Antwort

2

Dies steht in keinem Zusammenhang mit Stream. Versuchen Sie Stream aus Ihrem Code unter:

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() 
} 

Dies führte schließlich null druckt, wie es sein sollte (ich glaube, wenn die Fernbedienung langweilig wird und auflegt).

Was passiert ist, dass , mit einer leeren Sequenz, wird eine leere Zeichenfolge erzeugen.

+0

Sie haben Recht. Es hat nichts mit Steam zu tun. – orange14

Verwandte Themen