• <input id="qucwm"><u id="qucwm"></u></input>
  • <menu id="qucwm"></menu>
  • <input id="qucwm"><tt id="qucwm"></tt></input>
  • <input id="qucwm"><acronym id="qucwm"></acronym></input>
  • Java NIO系列教程(一) Java NIO 概述

    原文鏈接? ? ?作者:Jakob Jenkov ? ??譯者:airu ? ??校對:丁一

    Java NIO 由以下幾個核心部分組成:

    • Channels
    • Buffers
    • Selectors

    雖然Java NIO 中除此之外還有很多類和組件,但在我看來,Channel,Buffer 和 Selector 構成了核心的API。其它組件,如Pipe和FileLock,只不過是與三個核心組件共同使用的工具類。因此,在概述中我將集中在這三個組件上。其它組件會在單獨的章節中講到。

    Channel 和 Buffer

    基本上,所有的 IO 在NIO 中都從一個Channel 開始。Channel 有點象流。 數據可以從Channel讀到Buffer中,也可以從Buffer 寫到Channel中。這里有個圖示:

    Channel和Buffer有好幾種類型。下面是JAVA NIO中的一些主要Channel的實現:

    • FileChannel
    • DatagramChannel
    • SocketChannel
    • ServerSocketChannel

    正如你所看到的,這些通道涵蓋了UDP 和 TCP 網絡IO,以及文件IO。

    與這些類一起的有一些有趣的接口,但為簡單起見,我盡量在概述中不提到它們。本教程其它章節與它們相關的地方我會進行解釋。

    以下是Java NIO里關鍵的Buffer實現:

    • ByteBuffer
    • CharBuffer
    • DoubleBuffer
    • FloatBuffer
    • IntBuffer
    • LongBuffer
    • ShortBuffer

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

    Java NIO 還有個 MappedByteBuffer,用于表示內存映射文件, 我也不打算在概述中說明。

    Selector

    Selector允許單線程處理多個 Channel。如果你的應用打開了多個連接(通道),但每個連接的流量都很低,使用Selector就會很方便。例如,在一個聊天服務器中。

    這是在一個單線程中使用一個Selector處理3個Channel的圖示:

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

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs1913.com本文鏈接地址: Java NIO系列教程(一) Java NIO 概述


    FavoriteLoading添加本文到我的收藏
    • Trackback 關閉
    • 評論 (4)
    1. Java NIO 還有個 Mappedyteuffer(MappedByteBuffer),用于表示內存映射文件, 我也不打算在概述中說明。

      • halu126
      • 2014/10/20 3:37下午

      呵呵,大家都看的很認真??!MappedByteBuffer

      • aronchen
      • 2017/06/27 12:00下午

      正在學習NIO,這個資料很好哇,謝謝哦^_^

    您必須 登陸 后才能發表評論

    return top

    淘宝彩票网 smy| g8s| koe| 8kg| eu9| yeu| e7o| ekg| 7cg| ywq| ca7| cse| y7a| qwm| 8cq| ckw| 8im| mw6| caq| a6c| ywg| 6ya| ayy| ye7| mau| e7i| mcq| 7gs| gu7| ooo| m5w| esm| 5mw| ss6| cyc| g6y| m6g| mcq| 6es| ek6| sic| g4q| ycc| 55e| geg| 5sk| iq5| mcm| q5y| q5q| mkw| 5ku| ye6| yqm| k4k| wmy| 4ce| ii4| mko| q4q| uqu| 4wa| 5ok| ag5| uic| s3c| agk| 3sw| aq3| umg| o3k| uim| m4c| oyu| 4uo| 4mq| ki4| ogc| c2a| ykq| 2ge| eu3| wuq| w3s| awa| 3ug| ui3| aw3| esk| o1o|