java - channel

來源:趣味經驗館 2.94W

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

java channel是什麼,讓我們一起了解一下?

Channel是通道的意思,表示IO源與目標開啟的連接,類似於傳統的“流”,但是Channel不能直接訪問數據,需要和緩衝區buffer進行交互。

打個比喻:山西有煤,山東想要,於是乎建了一條鐵路連通到山東,這條鐵路就是這裏的"Channel",那麼煤透過什麼運過來呢?鐵路建好了,就差火車了,因此這裏的火車就像是緩衝區,火車把山西的煤運到山東來,把我們這裏的錢運過去,這樣雙向傳輸就愉快的完成了。Channel類似於傳統的“流”,只不過Channel不能直接訪問數據,Channel只能與buffer交互。而且流是單向的,分爲輸入流和輸出流, 但是通道是雙向的,透過緩衝區buffer兩邊都可達,Channel表示IO源與目標開啟的連接。

java channel

獲取通道的方式有哪些?

1、透過getChannel()方法獲取。

前提是該類支援該方法。支援該類的方法有:

FileInputStream/FileOutputStream,RandomAccessFile,Socket,ServerSocket ,DatagramSocket

2、透過靜態方法open()。

3、透過jdk1.7中Files的newByteChannel()方法。

java channel是如何實現的?

我們以AbstractChannel爲例,透過提供一些公共API進行實現,比如localAddress()和 remoteAddress()方法,實現源碼如下:

public SocketAddress localAddress() {    SocketAddress localAddress = this.localAddress;    if (localAddress == null) {        try {            this.localAddress = localAddress = unsafe().localAddress();        } catch (Throwable t) {            // Sometimes fails on a closed socket in Windows.            return null;        }    }    return localAddress;}

熱門標籤