国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java NIO 概覽

chemzqm / 3117人閱讀

摘要:線程之間的切換對于操作系統(tǒng)來說是昂貴的。因此,單線程可以監(jiān)視多個通道中的數(shù)據(jù)。當(dāng)方法返回后,線程可以處理這些事件。

一 NIO簡介

Java NIOjava 1.4 之后新出的一套IO接口,這里的的新是相對于原有標(biāo)準(zhǔn)的Java IO和Java Networking接口。NIO提供了一種完全不同的操作方式。

NIO中的N可以理解為Non-blocking,不單純是New。

它支持面向緩沖的,基于通道的I/O操作方法。 隨著JDK 7的推出,NIO系統(tǒng)得到了擴展,為文件系統(tǒng)功能和文件處理提供了增強的支持。 由于NIO文件類支持的這些新的功能,NIO被廣泛應(yīng)用于文件處理。

二 NIO的特性/NIO與IO區(qū)別

1 Channels and Buffers(通道和緩沖區(qū))

IO是面向流的,NIO是面向緩沖區(qū)的

標(biāo)準(zhǔn)的IO編程接口是面向字節(jié)流和字符流的。而NIO是面向通道和緩沖區(qū)的,數(shù)據(jù)總是從通道中讀到buffer緩沖區(qū)內(nèi),或者從buffer緩沖區(qū)寫入到通道中;( NIO中的所有I/O操作都是通過一個通道開始的。)

Java IO面向流意味著每次從流中讀一個或多個字節(jié),直至讀取所有字節(jié),它們沒有被緩存在任何地方;

Java NIO是面向緩存的I/O方法。 將數(shù)據(jù)讀入緩沖器,使用通道進一步處理數(shù)據(jù)。 在NIO中,使用通道和緩沖區(qū)來處理I/O操作。

2 Non-blocking IO(非阻塞IO)

IO流是阻塞的,NIO流是不阻塞的。

Java NIO使我們可以進行非阻塞IO操作。比如說,單線程中從通道讀取數(shù)據(jù)到buffer,同時可以繼續(xù)做別的事情,當(dāng)數(shù)據(jù)讀取到buffer中后,線程再繼續(xù)處理數(shù)據(jù)。寫數(shù)據(jù)也是一樣的。另外,非阻塞寫也是如此。一個線程請求寫入一些數(shù)據(jù)到某通道,但不需要等待它完全寫入,這個線程同時可以去做別的事情。

Java IO的各種流是阻塞的。這意味著,當(dāng)一個線程調(diào)用read() 或 write()時,該線程被阻塞,直到有一些數(shù)據(jù)被讀取,或數(shù)據(jù)完全寫入。該線程在此期間不能再干任何事情了

3 Selectors(選擇器)

NIO有選擇器,而IO沒有。

選擇器用于使用單個線程處理多個通道。因此,它需要較少的線程來處理這些通道。

線程之間的切換對于操作系統(tǒng)來說是昂貴的。 因此,為了提高系統(tǒng)效率選擇器是有用的。

三 讀數(shù)據(jù)和寫數(shù)據(jù)方式

通常來說NIO中的所有IO都是從 Channel(通道) 開始的。

從通道進行數(shù)據(jù)讀取 :創(chuàng)建一個緩沖區(qū),然后請求通道讀取數(shù)據(jù)。

從通道進行數(shù)據(jù)寫入 :創(chuàng)建一個緩沖區(qū),填充數(shù)據(jù),并要求通道寫入數(shù)據(jù)。

數(shù)據(jù)讀取和寫入操作圖示:

四 NIO核心組件簡單介紹

NIO包含下面幾個核心的組件:

Channels

Buffers

Selectors

整個NIO體系包含的類遠(yuǎn)遠(yuǎn)不止這三個,只能說這三個是NIO體系的“核心API”。

通道

在Java NIO中,主要使用的通道如下(涵蓋了UDP 和 TCP 網(wǎng)絡(luò)IO,以及文件IO):

DatagramChannel

SocketChannel

FileChannel

ServerSocketChannel

緩沖區(qū)

在Java NIO中使用的核心緩沖區(qū)如下(覆蓋了通過I/O發(fā)送的基本數(shù)據(jù)類型:byte, char、short, int, long, float, double ,long):

ByteBuffer

CharBuffer

ShortBuffer

IntBuffer

FloatBuffer

DoubleBuffer

LongBuffer

選擇器

Java NIO提供了“選擇器”的概念。這是一個可以用于監(jiān)視多個通道的對象,如數(shù)據(jù)到達,連接打開等。因此,單線程可以監(jiān)視多個通道中的數(shù)據(jù)。

如果應(yīng)用程序有多個通道(連接)打開,但每個連接的流量都很低,則可考慮使用它。 例如:在聊天服務(wù)器中。

下面是一個單線程中Slector維護3個Channel的示意圖:

要使用Selector的話,我們必須把Channel注冊到Selector上,然后就可以調(diào)用Selector的select()方法。這個方法會進入阻塞,直到有一個channel的狀態(tài)符合條件。當(dāng)方法返回后,線程可以處理這些事件。

參考:

官方JDK相關(guān)文檔

谷歌搜索排名第一的Java NIO教程

Java NIO 與 IO之間的區(qū)別

《Java程序員修煉之道》

歡迎關(guān)注我的微信公眾號:"Java面試通關(guān)手冊"(一個有溫度的微信公眾號,期待與你共同進步~~~堅持原創(chuàng),分享美文,分享各種Java學(xué)習(xí)資源):

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69379.html

相關(guān)文章

  • 關(guān)于Java IO與NIO知識都在這里

    摘要:從通道進行數(shù)據(jù)寫入創(chuàng)建一個緩沖區(qū),填充數(shù)據(jù),并要求通道寫入數(shù)據(jù)。三之通道主要內(nèi)容通道介紹通常來說中的所有都是從通道開始的。從中選擇選擇器維護注冊過的通道的集合,并且這種注冊關(guān)系都被封裝在當(dāng)中停止選擇的方法方法和方法。 由于內(nèi)容比較多,我下面放的一部分是我更新在我的微信公眾號上的鏈接,微信排版比較好看,更加利于閱讀。每一篇文章下面我都把文章的主要內(nèi)容給列出來了,便于大家學(xué)習(xí)與回顧。 Ja...

    Riddler 評論0 收藏0
  • Java NIO之擁抱Path和Files

    摘要:返回一個路徑,該路徑是冗余名稱元素的消除。本節(jié)教程將覆蓋大部分方法。在本例中,這個數(shù)組內(nèi)包含了,表示檢測時不包含符號鏈接文件。遍歷整個文件目錄接受一個和作為參數(shù)。 Java面試通關(guān)手冊(Java學(xué)習(xí)指南)github地址(歡迎star和pull):https://github.com/Snailclimb/Java_Guide 歷史回顧: Java NIO 概覽 Java NIO 之 ...

    DevYK 評論0 收藏0
  • Java NIO 之 Channel(通道)

    摘要:通道可以異步讀寫。使用的方法讀取數(shù)據(jù)創(chuàng)建一個讀數(shù)據(jù)緩沖區(qū)對象從通道中讀取數(shù)據(jù)使用的方法寫入數(shù)據(jù)創(chuàng)建一個寫數(shù)據(jù)緩沖區(qū)對象寫入數(shù)據(jù)關(guān)閉完成使用后,您必須關(guān)閉它。五提供了一種被稱為的新功能,也稱為本地矢量。功能是通道提供的并不是。 歷史回顧: Java NIO 概覽 Java NIO 之 Buffer(緩沖區(qū)) 其他高贊文章: 面試中關(guān)于Redis的問題看這篇就夠了 一文輕松搞懂redis集...

    piglei 評論0 收藏0
  • Java NIO之Selector(選擇器)

    摘要:抽象類有一個方法用于使通道處于阻塞模式或非阻塞模式。注意抽象類的方法是由抽象類實現(xiàn)的,都是直接繼承了抽象類。大家有興趣可以看看的源碼,各種抽象類和抽象類上層的抽象類。 歷史回顧: Java NIO 概覽 Java NIO 之 Buffer(緩沖區(qū)) Java NIO 之 Channel(通道) 其他高贊文章: 面試中關(guān)于Redis的問題看這篇就夠了 一文輕松搞懂redis集群原理及搭建...

    xiaokai 評論0 收藏0
  • Netty3文檔翻譯(二)

    摘要:豐富的緩存數(shù)據(jù)結(jié)構(gòu)使用它自己的緩存來表示字節(jié)序列而不是的。針對有一個定義良好的事件模型。有一些協(xié)議是多層的建立在其他低級協(xié)議基礎(chǔ)上。此外,甚至不是完全線程安全的。協(xié)議由標(biāo)準(zhǔn)化為。協(xié)議緩存整合是一個高效二進制協(xié)議的快速實現(xiàn)。 Chapter 2、結(jié)構(gòu)概覽 這一節(jié)我們將確認(rèn)Netty提供的核心功能是什么,以及它們怎么構(gòu)成一個完整的網(wǎng)絡(luò)應(yīng)用開發(fā)堆棧。 1、豐富的緩存數(shù)據(jù)結(jié)構(gòu) Netty使用它...

    Zhuxy 評論0 收藏0

發(fā)表評論

0條評論

chemzqm

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<