我正在開發服務器客戶端應用程序,並且在等待輸入流上的輸入數據時遇到問題。Java InputStream等待數據。
我有專用於讀取輸入數據的線程。目前它使用while循環來保持數據可用。 (N.B.協議如下:發送數據包的大小,比如說N,然後發送N個字節)。
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
}
}
它的工作原理,但通過while循環阻塞線程是一個壞主意。我可以使用Thread.sleep(X)來防止循環連續消耗資源,但肯定有更好的方法。
另外我不能依賴InputStream.read來阻塞線程,因爲數據的一部分可能由服務器發送延遲。我嘗試過,但總是會導致意外的行爲。
我會很感激的任何想法:)
InputStream.read已經當數據不可用塊。所以放棄'可用'方法。 – UmNyobe 2012-03-12 12:17:43