一、前言
前面學習了緩沖區(qū)的相關(guān)知識點,接下來學習通道。
二、通道
2.1 層次結(jié)構(gòu)圖
對于通道的類層次結(jié)構(gòu)如下圖所示。
其中,Channel是所有類的父類,其定義了通道的基本操作。從 Channel 接口引申出的其他接口都是面向字節(jié)的子接口,包括 WritableByteChannel和ReadableByteChannel。這也意味著通道只能在字節(jié)緩沖區(qū)上操作。
2.2 通道基礎(chǔ)
Channel接口類只定義了兩個方法(isOpen和close),分別表示通道是否打開和關(guān)閉通道,具體細節(jié)需要子類實現(xiàn)?! ?/p>
IO操作可分為File IO和Stream IO,對應通道也有它們是文件( file)通道和套接字( socket)通道 。通道可以有多種方式創(chuàng)建。Socket 通道有可以直接創(chuàng)建新 socket 通道的工廠方法。但File通道不能直接創(chuàng)建,只能通過在一個打開的RandomAccessFile、FileInputStream或FileOutputStream的對象上調(diào)用getChannel( )方法來獲取。
通道將數(shù)據(jù)傳輸給 ByteBuffer 對象或者從 ByteBuffer 對象獲取數(shù)據(jù)進行傳輸,通道可以是單向( unidirectional)或者雙向的( bidirectional)。一個 channel 類可能實現(xiàn)定義read( )方法的 ReadableByteChannel 接口,而另一個 channel 類也許實現(xiàn) WritableByteChannel 接口以提供 write( )方法。實現(xiàn)這兩種接口其中之一的類都是單向的,只能在一個方向上傳輸數(shù)據(jù)。如果一個類同時實現(xiàn)這兩個接口,那么它是雙向的,可以雙向傳輸數(shù)據(jù)。如ByteChannel 接口,該接口繼承 ReadableByteChannel 和WritableByteChannel 兩個接口,可雙向傳輸數(shù)據(jù)。
值得注意的是,從
延伸閱讀
學習是年輕人改變自己的最好方式