2013-04-25 73 views
3

我正在NIO寫一些網絡代碼。一旦達到流結束,連接是否應該被關閉?

ByteBuffer buf = ByteBuffer.allocate(Hub.getBufferSize()); 
int read = channel.read(buf); 
if (read == -1) { 
    client.disconnect(); 
    return; 
} else if (read == 0) { 
    return; 
} 

我知道這是一個讀取返回-1,這意味着連接的流的末尾已達到。但這是否意味着與該客戶的連接已經結束?此外,服務器是否應該在到達流末端時明確關閉通道,還是冗餘?

謝謝。

回答

6

我知道這是一個讀取返回-1,這意味着連接的流已達到結束。但這是否意味着與該客戶的連接已經結束?

這是一回事。這些不是兩個不同的概念,其中一個意味着另一個。這是同一件事。

此外,如果一旦達到

是最終的流服務器明確的關閉通道。

如果你不關閉它,它是一個套接字泄漏和內存泄漏。

還是它是多餘的?

當然不是。往上看。另外,如果你不關閉它,你將繼續收到OP_READ,並繼續閱讀-1。只是在浪費時間。

+0

這回答了這一切。謝謝。 – 2013-04-25 22:06:55

0

流關閉後,無法重新打開它。明確關閉一些東西以避免可能的資源泄漏總是一個好主意。

+0

不只是一個'好主意'。這是強制性的。 – EJP 2015-03-23 22:13:54