NIO類庫的簡介

緩衝區Buffer

Buffer是一個對象,該類是個抽象類,主要包含一些要寫入或者要讀出的數據。在INO類庫中加入Buffer對象,體現了新庫與原來的I/O的區別。

在NIO庫中,所有的數據都是用緩衝區處理的。在讀取數據時,它是直接讀取到緩衝區中的,在寫入數據時,寫入到緩衝區中。任何時候該訪問NIO中的數據,都是通過緩衝區進行操作。

緩衝區實質上是一個數組,通常是一個byteBuffer。一個緩衝區不僅僅是一個數組,緩衝區還提供了對數據的結構化訪問以及維護讀寫位置等信息。

通道Channel

channel是一個通道,網絡數據通過channel進行讀寫。通道和流的不同之處在於通道是雙向的,流只是在一個方向上移動,而通道可以用於讀寫或者二者的同時進行。

channel是全雙工的,所以它可以比流更好的映射底層操作系統的API.

主要分爲兩大類:

    用於網絡讀寫的selectablechannel

    用於文件操作的filechannel

    serversocketchannel和socketchannel都是selectablechannel的子類

多路複用器selector

它是Java NIO編程的基礎。

selector會不斷地輪詢註冊在其上的channel,如果某個channel上發生了讀或者寫的事件,這個channel就處於就緒狀態,會被selector輪詢出來,然後通過selectionkey可以獲取就緒channel的集合,在進行後續的I/O操作。

一個多路複用器selector可以同時輪詢多個channel,由於jdk使用;了epoll()代替傳統的select實現,所以它並沒有限制最大鏈接句柄。一個線程負責selector的輪詢,就可以介入成千上萬的客戶端。

 

【1】NIO入門案例客戶端的代碼具體實現以及詳細註釋
https://blog.csdn.net/wildwolf_001/article/details/81102953
【2】NIO入門案例服務端的代碼具體實現以及詳細註釋
https://blog.csdn.net/wildwolf_001/article/details/81085938
【3】NIO入門案例之分析NIO服務端序列圖
https://blog.csdn.net/wildwolf_001/article/details/81069180

【4】NIO入門案例使用netty最新版本框架代碼實現及詳細註釋
https://blog.csdn.net/wildwolf_001/article/details/81132896

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章