2016-04-07 4 views
0

私はJava NIO、AsynchronousSocketChannelを書いています。サーバーの応答を待つためにこのコード原因asynchronousSocketChannelはプログラムの他の部分を書き込み、中断します

while(asynchronousSocketChannel.read(buffer).get() != -1) 

が、私はそれをカスタマイズしたいと私は私が欲しい意味、サーバーを待たない:「完了」で、デフォルトではほとんどのプログラマは、このコードを使用します他に何かをしていることを確認した後、そこに書かれている場合かどうかには、以下のように:

while(true){ 
if(asynchronousSocketChannel.read(buffer).get() != -1){ 
    //do something 
} 
else{ 
    //do something else 
} 

私は別のアルゴリズムの束を試したが、それは動作しません。誰かに何か考えがありますか?

+0

ほとんどのプログラマーがこのコードを使用しているという主張の証拠を作成してください。このように完全に同期した方法で非同期ソケットを使用するのは時間の無駄です。ブロッキングモードNIO、または 'java.net.Socket'を使用する方が簡単です。 – EJP

+0

"同期I/O操作では、スレッドは動作に入り、I/O要求が完了するまで待機します(プログラムは終了するまで待っていますが、途中で終了することはありません)。非同期環境では、スレッドはより多くのカーネルヘルプを使用してI/O操作を実行しますが、実際にはその要求をすぐにカーネルに渡し、別のジョブを処理し続けます。これを読んで、私は非同期がBIGになる私のシステムのためのより良い選択かもしれないと仮定します。あなたの意見で私のケースが「完全に同期的なやり方」としているのはなぜですか? – APNezh

答えて

0

あなたは、読んだものを投稿し、「何か他のもの」を行い、その後、読んだ未来の結果を取り出すべきです。

+0

申し訳ありませんが、私は完全に確信している事は、このクライアント(クライアントは非同期クライアント(CompletionHandler)に基づいています)に応答するサーバーを使用すると、コードが実行されるということです(asynchronousSocketChannel.read(buffer).get()が-1になっていないので実行する必要があります)、サーバーが応答しない場合、プログラムは完全に停止します。私にとって、それは本当に奇妙な振る舞いです。特に、信頼できる本でこの例を見ると – APNezh

関連する問題