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