日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IO NIO

發(fā)布時間:2023/12/13 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IO NIO 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1,Java NIO ?

Java non-blocking IO?即 非阻塞IO,線程在等待的時候,可以做其他的事情。

?

2,IO?對比NIO

IO?是面向流,NIO?是面向緩沖

面向流是指每次從流中讀出一個或者多個字節(jié),直到全部讀出為止

面向緩沖區(qū)是指將數(shù)據(jù)先存到一個緩存區(qū)

?

IO 是阻塞, NIO 是非阻塞

IO:?當線程調(diào)用read() 或者write()?的時候,只有當數(shù)據(jù)被讀取或者完全寫入,否則該線程在此期間干不了其他事情。

NIO: 一個線程向通道發(fā)送請求讀取數(shù)據(jù)開始,直到數(shù)據(jù)變的可以讀取之前,線程不會阻塞,可以一直做其他事情。

?

3,IO 與 NIO 的選擇

每次發(fā)送少量數(shù)據(jù),但是需要建立多個通道的情況,例如聊天室,這種情況適合用NIO

大量數(shù)據(jù),少量連接,這種情況適合用IO

?

4,NIO有三個核心模塊:Selector(選擇器)、Channel(通道)、Buffer(緩沖區(qū));

?

Buffer:與Channel 進行交互時,需要將數(shù)據(jù)從Channel 讀取到Buffer,從Buffer 寫入到Channel,緩沖區(qū)本質(zhì)上是一塊可以存取數(shù)據(jù)的內(nèi)存,只是被包裝成了NIO? Buffer 對象,提供一些方法,可以訪問。

緩沖區(qū)基本類型:ByteBuffer;CharBuffer;ShortBuffer;IntBuffer;LongBuffer;FloatBuffer;DoubleBuffer;

?

Channel: Channel好比IO 流的模擬,任何數(shù)據(jù)read() 或者write(),都必須通過Channel對象。

?

Selector:NIO 用select 機制,不用為每一個客戶端連接新的線程處理,而是將其注冊到Selector 對象中,這樣單線程利用Selector 對象管理大量的并發(fā)的網(wǎng)絡連接。

當有讀寫或時間發(fā)生時候,可以從Selector對象中獲得一個SelectorKey 通過這個SelectorKey 可以找到具體的Channel 來獲取從客戶端傳過來的數(shù)據(jù)。

通道和緩沖區(qū)的機制,使得線程無需阻塞地等待IO事件的就緒,但是總是要有人來監(jiān)管這些IO事件。這個工作就交給了selector來完成,這就是所謂的同步。

要使用Selector,得向Selector注冊Channel,然后調(diào)用它的select()方法。這個方法會一直阻塞到某個注冊的通道有事件就緒,這就是所說的輪詢。一旦這個方法返回,線程就可以處理這些事件。

??? Selector中注冊的感興趣事件有:

  • OP_ACCEPT:即連接事件(TCP 連接), 對應于SelectionKey.OP_CONNECT;

  • OP_CONNECT :即確認事件, 對應于SelectionKey.OP_ACCEPT;

  • OP_READ :即讀事件, 對應于SelectionKey.OP_READ, 表示 buffer 可讀.

  • OP_WRITE:即寫事件, 對應于SelectionKey.OP_WRITE, 表示 buffer 可寫.

?

轉載于:https://www.cnblogs.com/pickKnow/p/9712062.html

總結

以上是生活随笔為你收集整理的IO NIO的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。