Java NIO學習筆記一------初識篇

Java NIO是在jdk1.4開始使用的,它既可以說成新IO(New I/O),也可以說成非阻塞式I/O(Non-blocking IO)。

Java IO和NIO的主要區別

面向流與面向緩衝區 
IO是面向流的。面向流意味着每次從流中讀一個或多個字節,直至讀取所有字節,數據沒有存在任何緩衝區。 
NIO是面向緩衝區的。 面向緩衝區意味着數據讀取到一個緩衝區,需要時可在緩衝區中前後移動讀取數據。 
阻塞與非阻塞IO 
Java IO的各種流的讀寫是阻塞的。當一個線程調用read() 或 write()時,該線程被阻塞。阻塞可能帶來頻繁的上下文切換。 
Java NIO的非阻塞模式,使一個線程從某通道發送請求讀取數據,但是它僅能得到目前可用的數據,如果目前沒有數據可用時,就什麼都不會獲取,而不是保持線程阻塞,所以直至數據變的可以讀取之前,該線程可以繼續做其他的事情。 非阻塞寫也是如此。線程通常將非阻塞IO的空閒時間用於在其它通道上執行IO操作,所以一個單獨的線程現在可以管理多個輸入和輸出通道(channel)。 
一對一和一對多 
Java IO處理每一個輸入/輸出都要維護一個單獨的線程。 
Java NIO的選擇器(Selectors)允許一個單獨的線程來監視多個輸入通道,你可以註冊多個通道使用一個選擇器,然後使用一個單獨的線程來“選擇”通道。這種選擇機制,使得一個單獨的線程很容易來管理多個通道。

Java NIO核心部分介紹

Java NIO中核心部分爲: 
- Channels 
- Buffers 
- Selectors。

Channel

Channel 有點象流,數據可以從Channel讀到Buffer中,也可以從Buffer寫到Channel中。 
JAVA NIO中的一些主要Channel的實現: 
- FileChannel(文件IO) 
- ServerSocketChannel(TCP網絡IO) 
- SocketChannel(TCP網絡IO) 
- DatagramChannel(UDP網絡IO)

Buffer

JAVA NIO中的一些主要Buffer的實現: 
- ByteBuffer 
- MappedByteBuffer 
- CharBuffer 
- DoubleBuffer 
- FloatBuffer 
- IntBuffer 
- LongBuffer 
- ShortBuffer

Selector

Selector允許單線程處理多個 Channel。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章