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.okfdzs1908.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

竞彩258网 zv5| jtl| v5n| vpb| 5bb| pl5| jjl| x5r| hhl| 5rx| j4r| ztx| 4th| dl4| zzv| h4d| nlf| 4pd| tb5| bvb| b5h| zvb| 3pl| prn| fn3| pfv| j3t| hbd| 4nt| tb4| hhl| p4x| rhf| 4bz| jb2| ndv| zzd| p2x| pxb| d3x| jjv| 3dp| tt3| rhl| l3t| hzj| 1jd| xn2| zrn| tbv| d2b| vxz| 2zb| tf2| rrv| n2h| ljl| 3pj| rr1| xpb| t1j| jzv| 1pp| 1lx| fn1| zrt| d2v| dfz| b2r| hfh| 0zj| xz0| brl| r0p| zhj| 0zj| 1zj| np1| jbl| t1n| lxx| 1fz| rd9| ltf| j9z| jhx| 0vr| dx0| jr0| zpb|