天天看點

Java NIO系列教程(二) Channel

java nio的通道類似流,但又有些不同:

既可以從通道中讀取資料,又可以寫資料到通道。但流的讀寫通常是單向的。

通道可以異步地讀寫。

通道中的資料總是要先讀到一個buffer,或者總是要從一個buffer中寫入。

正如上面所說,從通道讀取資料到緩沖區,從緩沖區寫入資料到通道。如下圖所示:

Java NIO系列教程(二) Channel

這些是java nio中最重要的通道的實作:

filechannel

datagramchannel

socketchannel

serversocketchannel

filechannel 從檔案中讀寫資料。

datagramchannel 能通過udp讀寫網絡中的資料。

socketchannel 能通過tcp讀寫網絡中的資料。

serversocketchannel可以監聽新進來的tcp連接配接,像web伺服器那樣。對每一個新進來的連接配接都會建立一個socketchannel。

下面是一個使用filechannel讀取資料到buffer中的示例:

注意 buf.flip() 的調用,首先讀取資料到buffer,然後反轉buffer,接着再從buffer中讀取資料。下一節會深入講解buffer的更多細節。