NIO(一):Java NIO概述

一:    Java NIO

1.1    NIO主要有如下幾個核心部分組成,即:

            Channels(通道)安全

            Buffers (緩衝區)服務器

            Selectors (選擇器)網絡

        雖然Java NIO 中除此以外還有不少類和組件,但Channel,Buffer 和 Selector 構成了核心的API。其它組件,如Pipe和FileLock,只不過是與三個核心組件共同使用的工具類。所以,接下來將集中簡單瞭解這三個組件。併發

1.2    Channel 和 Buffer

        基本上,全部的 IO 在NIO 中都從一個Channel 開始。Channel 有點象流。 數據能夠從Channel讀到Buffer中,也能夠從Buffer 寫到Channel中。這裏有個圖示:app

                        

Channel和Buffer有好幾種類型。socket

JAVA NIO中的一些主要Channel的實現:

FileChannel : 用於讀取、寫入、映射和操做文件的通道。(多個併發線程可安全地使用文件通道。)工具

DatagramChannel : 針對面向數據報套接字的可選擇通道。(數據報通道不是網絡數據報套接字的完整抽象。)學習

SocketChannel : 針對面向流的鏈接套接字的可選擇通道。(套接字通道不是鏈接網絡套接字的完整抽象)spa

ServerSocketChannel :針對面向流的偵聽套接字的可選擇通道。(服務器套接字通道不是偵聽網絡套接字的完整抽象。)線程

(後三者並不是完整抽象, 必須經過調用 socket方法所得到的關聯 ServerSocket 對象來完成對套接字選項的綁定和操做。不可能爲任意的已有服務器套接字建立通道,也不可能指定與服務器套接字通道關聯的服務器套接字所使用的SocketImpl 對象。)

 

Java NIO裏關鍵的Buffer實現:

ByteBuffer:字節緩衝區。

CharBuffer:字符緩衝區。

DoubleBuffer:double 緩衝區。

FloatBuffer:float 緩衝區。

IntBuffer:int 緩衝區。

LongBuffer:long 緩衝區。

ShortBuffer:short 緩衝區。

MappedByteBuffer:直接字節緩衝區,其內容是文件的內存映射區域。(映射的字節緩衝區是經過FileChannel .map 方法建立的。此類用特定於內存映射文件區域的操做擴展 ByteBuffer 類。)

這些Buffer覆蓋了你能經過IO發送的基本數據類型:byte, short, int, long, float, double 和 char。

 

1.3    Selector

    Selector容許單線程處理多個 Channel。若是你的應用打開了多個鏈接(通道),但每一個鏈接的流量都很低,使用Selector就會很方便。

    例如,在一個聊天服務器中。這是在一個單線程中使用一個Selector處理3個Channel的圖示:

                                                                            

要使用Selector,得向Selector註冊Channel,而後調用它的select()方法。這個方法會一直阻塞到某個註冊的通道有事件就緒。一旦這個方法返回,線程就能夠處理這些事件,事件的例子有如新鏈接進來,數據接收等。

 

 

 

更多學習:

                http://ifeve.com/overview/  (在此原文連接上加了點註釋)

相關文章
相關標籤/搜索