-
核心類
NIO核心
Channel:通道
Buffer:緩沖區
Selector:選擇器或多路復用器
其中:
channel是信息傳輸的通道,是jdk NIO中對輸入輸出方法的另一種抽象,類比IO中的流,與流不同之處在于,channel具有雙向性,而流是單向傳輸的,一個流必須是InputStream或OutputStream的子類,而通道可以用于讀寫或二者同時進行。channel可以工作在非阻塞模式下,構成NIO的基礎。在NIO中,操作channel的唯一方式是使用buffer,通過buffer操作channel,實現數據塊的傳輸。
channel的實現:
1. 文件類:FileChannel,用于對文件的讀寫
2. UDP類:DatagramChannel, 用于UDP的數據讀寫
3.?TCP類:ServerSocketChannel/SocketChannel,用于TCP的數據讀寫
查看全部 -
?非阻塞式I/O模型
彈性伸縮能力強
單線程節省資源
查看全部 -
NIO 網絡編程模型
====創建連接===
1.注冊建立連接事件(Selector)
2.客戶端發起連接請求
3.服務端接收請求,啟動建立連接事件處理器(Acceptor Handler)
4.Acceptor Handler創建與客戶端的連接
5.Acceptor Handler響應客戶端建立連接請求
6.Acceptor Handler向Selector注冊連接可讀事件====處理流===
7.Client發起請求
8.Selector啟動連接讀寫處理器(Read&Write Handler)
9.Read&Write Handler處理與Client的讀寫業務
10.Read&Write Handler響應Client的請求
11.Read&Write Handler向Selector注冊連接可讀事件查看全部 -
BIO網絡模型缺點
阻塞式I/O模型
彈性伸縮能力差
多線程耗資源
查看全部 -
BIO缺點:
每次客戶端請求就會生成一個線程,在大量的并發的情況下,接入的服務端過多,就會出現問題。1千個請求,創建一千個線程
查看全部 -
BIO模型:阻塞同步IO
過程:
1. 服務端啟動,開始建立監聽客戶端的連接請求;
2. 客戶端啟動,向服務器端發起建立連接請求;
3. 服務器在收到客戶端的請求后,將會創建一個新的線程;
4. 服務端新創建的線程會與客戶端建立socket連接,用于響應客戶端的請求,通知客戶端連接
查看全部 -
NIO :Non-blocking I/O(非阻塞IO) 或者New I/O
JDK1.4開始有的
查看全部 -
開發環境!
查看全部 -
NIO編程實現步驟
第一步:創建Selector
第二步:創建ServerSocketChannel,并綁定監聽端口
第三步:將Channel設置為非阻塞模式
第四步:將Channel注冊到Selector上,監聽連接事件
第五步:循環調用Selector的select方法,檢測就緒情況
第六步:調用selectedKeys方法獲取就緒channel集合
第七步:判斷就緒事件種類,調用業務處理方法
第八步:根據業務需要決定是否再次注冊監聽事件,重復執行第三步操作
查看全部 -
SelectionKey 選擇鍵
四種就緒狀態常量:連接就緒、接受就緒、讀就緒、寫就緒
查看全部 -
Selector的使用方法
查看全部 -
Selector 選擇器/多路復用器
作用:I/O就緒選擇
地位:NIO網絡編程的基礎
查看全部 -
Buffer:緩沖區,它提供唯一與channel進行交互的方式,作用是讀寫channel中的數據。Buffer從本質上說是一塊內存區域,它是一塊可以寫入數據,讀取數據的內存。
Buffer的屬性
Capacity:分配的buffer容量,一旦寫入的最大字節數超過這個容量,需要將其清空之后,才能繼續往里面寫數據
Position:當前操作的位置,初始值為0,最大值:容量值-1
Limit:上限,寫模式下等于Capacity,讀模式下等于最多能讀取的數據
Mark:標記,記錄mark的位置,調用reset方法時position會回到mark的位置
查看全部 -
Channel的使用
查看全部 -
NIO核心
Channel:通道
Buffer:緩沖區
Selector:選擇器或多路復用器
其中:
channel是信息傳輸的通道,是jdk NIO中對輸入輸出方法的另一種抽象,類比IO中的流,與流不同之處在于,channel具有雙向性,而流是單向傳輸的,一個流必須是InputStream或OutputStream的子類,而通道可以用于讀寫或二者同時進行。channel可以工作在非阻塞模式下,構成NIO的基礎。在NIO中,操作channel的唯一方式是使用buffer,通過buffer操作channel,實現數據塊的傳輸。
channel的實現:
1. 文件類:FileChannel,用于對文件的讀寫
2. UDP類:DatagramChannel, 用于UDP的數據讀寫
3.?TCP類:ServerSocketChannel/SocketChannel,用于TCP的數據讀寫
查看全部
舉報