Ich entwickle Server-Client-Anwendung und ich habe ein Problem mit dem Warten auf Eingabedaten im Eingabestream.
Ich habe einen Thread zum Lesen von Eingabedaten. Derzeit wird die While-Schleife verwendet, bis Daten verfügbar sind. (N.B. Protokoll ist wie folgt: send Größe des Pakets, sagen N, wie int dann senden N Bytes).
%Vor%Es funktioniert, aber blockiert den Thread durch While-Schleife ist IMO eine schlechte Idee. Ich könnte Thread.sleep (X) verwenden, um zu verhindern, dass Ressourcen durch die Schleife konsumiert werden, aber es muss sicherlich einen besseren Weg geben.
Ich kann mich auch nicht auf InputStream.read verlassen, um den Thread zu blockieren, da ein Teil der Daten vom Server mit Verzögerungen gesendet werden kann. Ich habe versucht, aber es führte immer zu unerwartetem Verhalten.
Ich würde mich über irgendwelche Ideen freuen:)
Sie können DataInputStream.readFully ()
verwenden %Vor%Ich bevorzuge blockierende NIO, die wiederverwendbare Puffer unterstützt.
%Vor% Wie UmNyobe sagte, ist available()
gedacht, wenn Sie dont blockieren möchten, da das Standardverhalten blockiert.
Benutze einfach das normale read
, um alles zu lesen, was verfügbar ist, aber nur send das Paket zur Verarbeitung in einem anderen Thread sobald du packetData.length
bytes in deinem Puffer hast ...