nio核心元件
1、buffer緩衝區
buffer工作原理
bytebuffer的簡單使用
通過下面這個簡單**可以深入理解上面三個引數在每次讀或寫之後的變化
public
class
bufferdemo
}
ps:關於bytebuffer
2、channel通道
客戶端socketchannel
伺服器端serversocketchannel
3、selector選擇器
selector原理
nio與bio對比
nio的使用案例
1、客戶端:
public
class
nioclient
scanner sc =
newscanner
(system.in)
; system.out.
println
("enter: ");
string msg = sc.
nextline()
; bytebuffer bytebuffer = bytebuffer.
wrap
(msg.
getbytes()
);while
(bytebuffer.
hasremaining()
) system.out.
println
("received response from server: ");
bytebuffer resbuffer = bytebuffer.
allocate
(1024);
while
(socketchannel.
isopen()
&& socketchannel.
read
(resbuffer)!=-
1)// 讀取響應
resbuffer.
flip()
;byte
content =
newbyte
[resbuffer.
limit()
];resbuffer.
get(content)
; system.out.
println
(new
string
(content));
sc.close()
; socketchannel.
close();}}
2、伺服器端
public
class
nioserverv2
// 如果是read事件
if(key.
isreadable()
)// 如果沒有資料,就不進行後面的操作
if(requestbuffer.
position()
==0)continue
;// 開啟讀取模式
requestbuffer.
flip()
;byte
content =
newbyte
[requestbuffer.
limit()
];requestbuffer.
get(content)
; system.out.
println
(new
string
(content));
system.out.
println
("received data from "
+ socketchannel.
getremoteaddress()
);// todo 業務操作 資料庫、介面呼叫等
// 響應資料
NIO網路程式設計
nio buffer陣列緩衝區 獲取物件 allocate int capacity allocatedirect int capacity wrap byte byte 常用方法 put 新增元素 capacity 容量 陣列的大小 position 位置 要存放元素位置,每操作乙個元素,位置就會...
NIO程式設計
1.客戶端關閉 的時候會拋異常 死迴圈 int read channel.read buffer if read 0 else 客戶端關閉 key.cancel 登出當前key 2.selector.select 阻塞 為什麼說nio 是非阻塞的io selector.select selector...
IO與NIO網路程式設計模型
一 bio bolcking io 阻塞分析 阻塞點 1.建立服務埠 serversocket serversocket new serversocket 12345 獲取socket套接字 socket socket serversocket.accept 阻塞等待客戶端連線 2.獲取客戶端輸入流...