Sunucu-İstemci uygulamasını geliştiriyorum ve giriş akışıyla ilgili girdi verilerini beklerken bir sorunum var.Java InputStream verileri bekletir.
Giriş verilerini okumaya özel bir iş parçacığım var. Şu anda veri kullanılabilir olana kadar tutmak için döngü sırasında kullanır. (N.B. protokolü şu şekildedir: paketin boyutlarını gönderin, N, int sonra N bayt gönderin).
public void run(){
//some initialization
InputStream inStream = sock.getInputStream();
byte[] packetData;
//some more stuff
while(!interrupted){
while(inStream.available()==0);
packetData = new byte[inStream.read()];
while(inStream.available()<packetData.length);
inStream.read(packetData,0,packetData.length);
//send packet for procession in other thread
}
}
İş parçacığı IMO çalışırken kötü bir fikir çalışırken iş parçacığı engelleme ancak çalışır. Döngü tarafından sürekli olarak tüketilen kaynakları önlemek için Thread.sleep (X) kullanabilirim, ama mutlaka daha iyi bir yol olmalı.
Ayrıca, girdinin bir parçası olarak iş parçacığı tarafından gecikme ile gönderilebilmesini engellemek için InputStream.read belgesine güvenemiyorum. Denedim ama her zaman beklenmedik davranışlarla sonuçlandı.
Ben herhangi bir fikir takdir ediyorum :)
InputStream.read zaten blokları veri mevcut değildir . yani "mevcut" yöntemini atın. – UmNyobe