java channel是什么,讓我們一起了解一下?
Channel是通道的意思,表示IO源與目標打開的連接,類似于傳統的“流”,但是Channel不能直接訪問數據,需要和緩沖區buffer進行交互。
打個比喻:山西有煤,山東想要,于是乎建了一條鐵路連通到山東,這條鐵路就是這里的"Channel",那么煤通過什么運過來呢?鐵路建好了,就差火車了,因此這里的火車就像是緩沖區,火車把山西的煤運到山東來,把我們這里的錢運過去,這樣雙向傳輸就愉快的完成了。Channel類似于傳統的“流”,只不過Channel不能直接訪問數據,Channel只能與buffer交互。而且流是單向的,分為輸入流和輸出流, 但是通道是雙向的,通過緩沖區buffer兩邊都可達,Channel表示IO源與目標打開的連接。
獲取通道的方式有哪些?
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; }
以上就是小編今天的分享了,希望可以幫助到大家。