Java NIO 概述
-
- 概念
- 核心組成
-
- Channel 和 Buffer
- Selector
概念
Java NIO(New IO)是一個可以替代标準Java IO API的IO API(從Java1.4開始),Java NIO提供了與标準IO不同的IO工作方式。
是以Java NIO是一種新式的IO标準,與之間的普通IO的工作方式不同。标準的IO基于位元組流和字元流進行操作的,而NIO是基于通道(Channel)和緩沖區(Buffer)進行操作,資料總是從通道讀取到緩沖區中,或者從緩沖區寫入通道也類似。
NIO是一種新型的IO,但NIO不僅僅就是等于Non-blocking IO(非阻塞IO),NIO中有實作非阻塞IO的具體類,但不代表NIO就是Non-blocking IO(非阻塞IO)。
核心組成
- Channels
- Buffers
- Selectors
傳統的IO操作面向資料流,意味着每次從流中讀一個或多個位元組,直至完成,資料沒有被緩存在任何地方。NIO操作面向緩沖區,資料從Channel讀取到Buffer緩沖區,随後在Buffer中處理資料。
Channel 和 Buffer
基本上,所有的 IO 在NIO 中都從一個Channel 開始。Channel 有點象流。 資料可以從Channel讀到Buffer中,也可以從Buffer 寫到Channel中。這裡有個圖示:

主要Channel的實作:
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
關鍵的Buffer實作:
- ByteBuffer
- CharBuffer
- DoubleBuffer
- FloatBuffer
- IntBuffer
- LongBuffer
- ShortBuffer
MappedByteBuffer,用于表示記憶體映射檔案
Selector
Selector允許單線程處理多個 Channel。如果你的應用打開了多個連接配接(通道),但每個連接配接的流量都很低,使用Selector就會很友善。
要使用Selector,得向Selector注冊Channel,然後調用它的select()方法。這個方法會一直阻塞到某個注冊的通道有事件就緒。一旦這個方法傳回,線程就可以處理這些事件,事件的例子有如新連接配接進來,資料接收等。
轉載自(http://ifeve.com/overview/)