首先我們翻開JAVA API 文檔中關于 java.nio.channels.Channel 的描述:
public interface Channel extends Closeable
ClosedChannelException
to be thrown. Whether or not a channel is open may be tested by invoking its isOpen
method. 從第2點我們可以看出,Channel與流類似,它是對原I/O中流的模擬,所有數據都要通過通道進行傳輸。Channel可以表示程序與硬件設備、文件、網絡Socket或程序組件之間的一個打開的連接,但它又和流有些不大相同的地方,其中一個表現在其可以操作一個或者多個不同的 I/O操作,也就是說Channel既可以從通道中讀取數據,又可以寫數據到通道,而流的讀寫通常是單向的。
從第4點我們可以看出,實現Channel 接口的類或接口是多線程安全的。
Channel的實現在Java NIO中,有眾多Channel的實現,但一些最重要的通道的實現有如下幾個:
針對以上幾個Channel的實現,我們能粗略地了解到Channel的實現類們能打通程序與文件和網絡Socket之間的通道,從而數據就可以通過Channel在程序與文件、網絡間進行傳輸,并且這個傳輸是可以進行一個或者多個不同的I/O操作的,也可以說是雙向的,例如讀和寫。如下圖1所示:
圖1. Channel連接程序與硬件設備、文件和網絡Socket的連接
具體Channel的實現類們該如何使用,我們將在后面的內容中結合其他核心部分進行介紹。
參考資料:
[1]. Java 2 SE 7 Documentation Package java.nio
[2]. 并發編程網 Java NIO系列教程
[3]. Java nio 學習筆記(一) Buffer(緩沖區)與Channel(通道)的相關知識
新聞熱點
疑難解答