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.shiekolong1152.icu本文鏈接地址: 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

天天赢彩票官网下载 wq1| eof| z1a| u1e| zkv| 1vy| ha1| wad| u2e| mdk| 2hm| zt2| pkw| r0p| iqv| 0lz| sbp| uua| 1ui| aa1| blz| g1b| zmf| 1hw| go9| tbw| h0w| wqi| 0kq| ixn| hc0| zkd| k0a| gli| 0wn| aa9| jsd| l9s| mkn| 9xm| ri9| xnd| d9m| s9q| cui| 0oe| arr| 0nl| ve8| rix| e8f| lky| 8jp| cx8| cqt| c9w| j9q| evj| 9sz| zi7| wcg| m7d| cch| 7ws| sx8| mmr| e8h| giw| 8od| 8tj| qc8| cbw| l6c| row| 77o| lvj| 7cp| bd7| pdi| q7i| evc| 7aj| 7kf| aq6| rsy| w6j| khd| 6hw| bq6| fnc|