私はServer-Clientアプリケーションを開発していますが、入力ストリームで入力データを待つことに問題があります。Java InputStreamはデータを待機します。
私は入力データの読み取り専用のスレッドを持っています。現在のところ、whileループは、データが利用可能になるまで保持します。 (N.B.プロトコルは以下の通りです:パケットのサイズを送信します、例えばNをintとして、次に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ループでスレッドをブロックしますが、IMOは悪い考えです。私はThread.sleep(X)を使って、リソースがループで絶えず消費されるのを防ぐことができますが、確かに良い方法でなければなりません。
また、データの一部が遅延のあるサーバーによって送信されるため、スレッドをブロックするためにInputStream.readに依存することはできません。私は試しましたが、いつも予想外の動作に終わりました。
は私が任意のアイデアをいただければと思います:)
InputStream.readは、すでにブロックのデータが入手できません。 'available'メソッドを破棄してください。 – UmNyobe