天天看點

Java 學習系列之 NIO(一)

Java NIO 概述

    • 概念
    • 核心組成
      • Channel 和 Buffer
      • Selector

概念

Java NIO(New IO)是一個可以替代标準Java IO API的IO API(從Java1.4開始),Java NIO提供了與标準IO不同的IO工作方式。

是以Java NIO是一種新式的IO标準,與之間的普通IO的工作方式不同。标準的IO基于位元組流和字元流進行操作的,而NIO是基于通道(Channel)和緩沖區(Buffer)進行操作,資料總是從通道讀取到緩沖區中,或者從緩沖區寫入通道也類似。

NIO是一種新型的IO,但NIO不僅僅就是等于Non-blocking IO(非阻塞IO),NIO中有實作非阻塞IO的具體類,但不代表NIO就是Non-blocking IO(非阻塞IO)。

核心組成

  • Channels
  • Buffers
  • Selectors

傳統的IO操作面向資料流,意味着每次從流中讀一個或多個位元組,直至完成,資料沒有被緩存在任何地方。NIO操作面向緩沖區,資料從Channel讀取到Buffer緩沖區,随後在Buffer中處理資料。

Channel 和 Buffer

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

Java 學習系列之 NIO(一)

主要Channel的實作:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

關鍵的Buffer實作:

  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer
MappedByteBuffer,用于表示記憶體映射檔案

Selector

Selector允許單線程處理多個 Channel。如果你的應用打開了多個連接配接(通道),但每個連接配接的流量都很低,使用Selector就會很友善。

Java 學習系列之 NIO(一)

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

轉載自(http://ifeve.com/overview/)