基于通道和緩沖區(qū)的讀寫操作!Java NIO的核心組件基本介紹

Java NIO

NIO基本介紹

  • Java NIO: Java New IO
    • 是一個可以替代標準Java IO API的IO API
    • Java NIO提供了與標準IO不同的工作方式

通道和緩沖區(qū)

  • 通道和緩沖區(qū): Channels and Buffers
    • 標準IO是基于字節(jié)流和字符流進行操作的
    • NIO是基于通道Channel和緩沖區(qū)Buffer進行操作:
      • 數(shù)據(jù)總是從通道讀取到緩沖區(qū)
      • 數(shù)據(jù)總是從緩沖區(qū)寫入到通道

非阻塞IO

  • 非阻塞IO: Non-blocking IO
    • Java NIO可以非阻塞地使用IO:
      • 當線程從通道讀取數(shù)據(jù)到緩沖區(qū)時,線程還可以進行其余操作;當數(shù)據(jù)被寫入到緩沖區(qū)時,線程也可以進行其余操作
      • 當數(shù)據(jù)從緩沖區(qū)寫入到通道時,線程也可以進行其余操作

選擇器

  • 選擇器: Selectors
    • 用于監(jiān)聽多個通道的事件. 比如連接打開,數(shù)據(jù)到達
    • 單個線程可以監(jiān)聽多個數(shù)據(jù)通道

NIO核心組件

  • Java NIO的核心組件:
    • Channels
    • Buffers
    • Selectors

Channel和Buffer

  • 所有的IONIO中都是從一個Channel開始的
  • Channel類似數(shù)據(jù)流:
    • 數(shù)據(jù)可以從Channel讀到Buffer
    • 數(shù)據(jù)也可以從Buffer讀到Channel
  • Channel的主要實現(xiàn): 涵蓋了UDP和TCP網(wǎng)絡IO以及文件IO
    • FileChannel
    • DatagramChannel
    • SocketChannel
    • ServerSocketChannel
  • Buffer的主要實現(xiàn): 覆蓋了能通過IO發(fā)送的基本數(shù)據(jù)類型-byte,short,int,long,float,double,char
    • ByteBuffer
    • CharBuffer
    • DoubleBuffer
    • FloatBuffer
    • IntBuffer
    • LongBuffer
    • ShortBuffer
    • Java NIO中還有一個MappedByteBuffer, 用于表示內(nèi)存映射文件

Selector

  • Selector允許單線程處理多個Channel:
    • 如果應用打開了多個連接通道,但是每個連接的數(shù)據(jù)流量都很低,使用Selector就會很方便
  • 示例: 在一個單線程中使用一個Selector處理3個Channel
    在這里插入圖片描述
  • 要使用Selector, 得向Selector注冊Channel, 然后調(diào)用Selector中的select() 方法 .
  • 這個方法會一直阻塞到某個注冊的通道有事件就緒.一旦這個方法返回,線程就可以處理這些事件,比如新連接和數(shù)據(jù)接收等
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容