Java NIO(New IO)是一個可以替代標準Java IO的IO API(從JDK1.4開始),Java NIO提供了與標準IO不同的工作模式。
Java NIO概述
Java NIO核心由Channels、buffers、Selectors組成,還有其他組件如Pipe、FileLock。
Channel 和 Buffer
基本上,所有的 IO 在NIO 中都從一個Channel 開始。Channel 有點象流。 數(shù)據(jù)可以從Channel讀到Buffer中,也可以從Buffer 寫到Channel中。數(shù)據(jù)總是從通道讀取到緩沖區(qū)中,或者從緩沖區(qū)寫入到通道中

Channel和Buffer有好幾種類型。下面是JAVA NIO中的一些主要Channel的實現(xiàn),這些通道涵蓋了UDP 和 TCP 網(wǎng)絡(luò)IO,以及文件IO。
- FileChannel:從文件中讀寫數(shù)據(jù)
- DatagramChannel:通過UDP讀寫網(wǎng)絡(luò)中的數(shù)據(jù)
- SocketChannel:通過TCP讀寫網(wǎng)絡(luò)中的數(shù)據(jù)
- ServerSocketChannel:可以監(jiān)聽新進來的TCP連接
以下是Java NIO里關(guān)鍵的Buffer實現(xiàn):
ByteBuffer
CharBuffer
DoubleBuffer
FloatBuffer
IntBuffer
LongBuffer
ShortBuffer
這些Buffer覆蓋了可以通過IO發(fā)送的基本數(shù)據(jù)類型:byte, short, int, long, float, double 和 char。Java NIO 還有個 MappedByteBuffer,用于表示內(nèi)存映射文件。緩沖區(qū)本質(zhì)上是一塊可以寫入數(shù)據(jù),然后可以從中讀取數(shù)據(jù)的內(nèi)存。這塊內(nèi)存被包裝成NIO Buffer對象,并提供了一組方法,用來方便的訪問該塊內(nèi)存
Selector
Selector允許單線程處理多個 Channel。如果應(yīng)用打開了多個連接(通道),但每個連接的流量都很低,使用Selector就會很方便。這是在一個單線程中使用一個Selector處理3個Channel的圖示
