0
private byte[] sendCommand (byte[] command){ 
     try { 
      nos.write(command); 
      nos.flush(); 

      byte[] buffer = new byte[4096]; 
      int read; 
      while ((read = nis.read(buffer, 0, 4096)) > 0 && isConnecting) { 
       // Read the response 
       temp_data = new byte[read]; 
       System.arraycopy(buffer, 0, temp_data, 0, read); 
      } 

私はdoInBackground()でsendCommandを3回呼び出します。 私は最初のコマンドを送信した後で13バイトの応答を期待し、次に2番目のコマンドで1バイト、次に3番目のコマンドで1kBを期待します。asynctask読み取りブロック

質問1:sendCommand()への最初の呼び出しは応答で13バイトを読み取りますが、データがなくなったためにwhile条件の読み取りブロックが読み取られます。私はそれをブロックせずに動かすことができますか?

質問2:1つのスレッドで繰り返し書き込みと読み取りを行うことはできますか? 2回目のsendCommand()呼び出しでは、同じ13バイトが1バイトの応答ではないためです。 outputstreamがコマンドを適切に送信していないのだろうかと思います。

+0

読み取りループ内に、それが終了する原因となるロジックが表示されません。これはあなたの実際のコードですか、それとも編集しましたか? – teppic

+0

これは私の実際のコードです。 readが-1のときに終了します。最初のwhileループでは13回読み込み、2回目のブロックではしばらくブロックしてから-1で終了します – juysw

答えて

0

私は一度だけ読むので、whileループを取り除かなければなりませんでした。私はまだwhileループを直ちに終了させない理由を理解していませんが、ループを削除することは平均時間のために機能します。

0

4kバイトを取得するように要求されているため、読み取りがブロックされています。すべての要求されたバイトを読む前にそれが戻す間、それはそうするために途中でブロックします。

関連する問題