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