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