Android開發進階之NIO非阻塞包 這個系列轉載於http://www.android123.com.cn/androidkaifa/695.html,特此說明
對於Android的網路通訊效能的提高,我們可以使用Java上高效能的NIO (New I/O) 技術進行處理,NIO是從JDK 1.4開始引入的,NIO的N我們可以理解為Noblocking即非阻塞的意思,相對應傳統的I/O,比如Socket的accpet()、read()這些方法而言都是阻塞的。
NIO主要使用了Channel和Selector來實現,Java的Selector類似Winsock的Select模式,是一種基於事件驅動的,整個處理方法使用了輪訓的狀態機器,如果你過去開發過Symbian應用的話這種方式有點像使用中的物件,好處就是單線程更節省系統開銷,NIO的好處可以很好的處理並發,對於Android網遊開發來說比較關鍵,對於多點Socket串連而言使用NIO可以大大減少線程使用,降低了線程死結的機率,畢竟手機遊戲有UI線程,音樂線程,網路線程,管理的難度可想而知,同時I/O這種低速裝置將影響遊戲的體驗。
NIO作為一種中高負載的I/O模型,相對於傳統的BIO (Blocking I/O)來說有了很大的提高,處理並發不用太多的線程,省去了建立銷毀的時間,如果線程過多調度是問題,同時很多線程可能處於空閑狀態,大大浪費了CPU時間,同時過多的線程可能是效能大幅下降,一般的解決方案中可能使用線程池來管理調度但這種方法治標不治本。使用NIO可以使並發的效率大大提高。當然NIO和JDK 7中的AIO還存在一些區別,AIO作為一種更新的當然這是對於Java而言,如果你開發過Winsock伺服器,那麼IOCP這樣的I/O完成連接埠可以解決更進階的負載,當然了今天Android123主要給大家講解下為什麼使用NIO在Android中有哪些用處。
NIO我們分為幾個類型分別描述,作為Java的特性之一,我們需要瞭解一些新的概念,比如ByteBuffer類,Channel,SocketChannel,ServerSocketChannel,Selector和SelectionKey。有關具體的使用,Android開發網將在明天詳細講解。網友可以在Android SDK文檔中看下java.nio和java.nio.channels兩個包瞭解。