網路程式設計 NIO基礎

2021-10-09 19:14:24 字數 3112 閱讀 3309

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.獲取客戶端輸入流...