2016-04-07 34 views
0

我在寫java 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操作,實際上,它會立即將請求傳遞給內核並繼續處理另一個任務。「通過閱讀本文,我認爲異步可能是更好的選擇,我的系統將會變得很大。我不明白爲什麼我的情況在你看來被認爲是「完全同步的方式」? – APNezh

回答

0

您應該發佈閱讀,做'其他',然後獲取閱讀未來的結果。

+0

對不起,我想請您更清楚地提一下,我完全確信的是,當我使用某個響應此客戶端的服務器(客戶端是異步客戶端(基於CompletionHandler))時,代碼將運行(它應該運行,因爲asynchronousSocketChannel.read(buffer).get()不再是-1),但是如果服務器沒有響應他,程序將會完全停止。對我來說這真是一種奇怪的行爲,特別是當我在一本可靠的書中看到這個例子 – APNezh

相關問題