成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

NIO基礎(chǔ)知識(shí)

scq000 / 3253人閱讀

摘要:獨(dú)立與內(nèi)存之外的,存在于物理內(nèi)存中的一塊內(nèi)存區(qū)域不收的管理。由于直接緩沖區(qū)在內(nèi)存之外,如果無(wú)法進(jìn)行有效管理容易造成物理內(nèi)存溢出,因此最好僅在直接緩沖區(qū)能在性能方面帶來(lái)明顯好處時(shí)使用。

Java NIO是java用來(lái)提高java IO操作性能?;诰W(wǎng)上的教程和一些資料對(duì)NIO的知識(shí)進(jìn)行整理和總結(jié)

緩沖區(qū)Buffer

底層是由數(shù)組實(shí)現(xiàn)并構(gòu)成的,負(fù)責(zé)數(shù)據(jù)的存儲(chǔ),不同的數(shù)據(jù)類(lèi)型有對(duì)應(yīng)類(lèi)型的緩沖區(qū),但容量是在Buffer對(duì)象聲明時(shí)指定的,Buffer對(duì)象一旦創(chuàng)建后,容量不能改變。常用的Buffer類(lèi)型及對(duì)應(yīng)的基本數(shù)據(jù)類(lèi)型:

   ByteBuffer     (byte)
   CharBuffer     (char)
   ShortBuffer    (short)
   IntBuffer      (int)
   LongBuffer     (long)
   FloatBuffer    (float)
   DoubleBuffer   (double)

不同類(lèi)型的Buffer管理緩沖區(qū)的方式都一致,通過(guò)allocate()方法獲取Buffer對(duì)象,且都是間接緩存區(qū)

Buffer的相關(guān)屬性

position:當(dāng)前正在進(jìn)行處理的數(shù)據(jù)在緩沖區(qū)的位置
limit:緩沖區(qū)中有效數(shù)據(jù)的范圍
capacity:緩沖區(qū)的最大容量
mark:用來(lái)記錄position所在的位置,與mark()、reset()方法聯(lián)合使用
例:以ByteBuffer為例

   ByteBuffer ByteBuffer = ByteBuffer.allocate(10);

Buffer的相關(guān)常用方法

put():向緩沖區(qū)存放數(shù)據(jù)
例:

byteBuffer.put("hello".getBytes());




flip():切換緩沖區(qū)的讀寫(xiě)狀態(tài),
例:

byteBuffer.flip();




get():從緩存區(qū)獲取數(shù)據(jù)
例:

byteBuffer.get();




rewind():使用get()方法從緩沖區(qū)獲取一部分或全部數(shù)據(jù)后,需要在重新從緩沖區(qū)中獲取數(shù)據(jù),需要先調(diào)用rewind()方法,然后再使用get()方法
例:

byteBuffer.rewind();




mark():將緩沖區(qū)屬性position的當(dāng)前取值賦給屬性mark,例:

byteBuffer.get();
byteBuffer.mark();
byteBuffer.get();




reset():將緩沖區(qū)屬性position的值重置為之前調(diào)用mark()方法時(shí)的position的值
例:

byteBuffer.reset();




clear():重置緩沖區(qū)屬性position=0,屬性limit=capacity,這樣就無(wú)法獲取到緩沖區(qū)中正確的數(shù)據(jù)了,但是clear()方法不會(huì)清空緩沖區(qū)中已存在的數(shù)據(jù)
例:

byteBuffer.clear();

Buffer相關(guān)屬性的取值范圍

0 <= mark <= position <= limit <= capacity

直接緩沖區(qū)

根據(jù)緩沖區(qū)在屋里內(nèi)存中的位置分為:直接緩沖區(qū)、間接緩沖區(qū)
間接緩沖區(qū):是在JVM的堆內(nèi)存中進(jìn)行創(chuàng)建的,JVM的GC能夠管理緩沖區(qū)占用的內(nèi)存。使用間接緩沖區(qū)進(jìn)行IO操作數(shù)據(jù)時(shí),需要從用戶(hù)地址空間copy到內(nèi)核地址空間,或是從內(nèi)核地址空間copy到用戶(hù)地址空間,所以IO性能沒(méi)有直接緩沖區(qū)的好。


直接緩沖區(qū):使用ByteBuffer.allocateDirect(1024)來(lái)創(chuàng)建直接緩沖區(qū),直接緩沖區(qū)只有ByteBuffer類(lèi)型。獨(dú)立與JVM內(nèi)存之外的,存在于物理內(nèi)存中的一塊內(nèi)存區(qū)域;不收J(rèn)VM的GC管理。JVM會(huì)盡最大努力在此緩沖區(qū)上執(zhí)行本機(jī)IO操作以提高IO性能。由于直接緩沖區(qū)在JVM內(nèi)存之外,如果無(wú)法進(jìn)行有效管理容易造成物理內(nèi)存溢出,因此最好僅在直接緩沖區(qū)能在性能方面帶來(lái)明顯好處時(shí)使用。

NIO分散讀取和聚集寫(xiě)入

Scattering reads:分散讀取按照緩沖區(qū)的順序依次將數(shù)據(jù)讀取到應(yīng)用程序中;

   read(byte[])

Gathering writes:聚集寫(xiě)入按照緩沖區(qū)的順序依次將應(yīng)用程序中的數(shù)據(jù)寫(xiě)入到緩沖區(qū)中:

   write(byte[])

NIO字符集

編碼:字符串轉(zhuǎn)換成字節(jié)數(shù)組的過(guò)程
解碼:字節(jié)數(shù)組轉(zhuǎn)換成字符串的過(guò)程
解碼和編碼過(guò)程中,字符串與字節(jié)數(shù)組相互轉(zhuǎn)換使用到的字符集;通過(guò)Chartset.forName(charsetName)方法進(jìn)行聲明

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68636.html

相關(guān)文章

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

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

    Riddler 評(píng)論0 收藏0
  • JDK10都發(fā)布了,nio你了解多少?

    摘要:而我們現(xiàn)在都已經(jīng)發(fā)布了,的都不知道,這有點(diǎn)說(shuō)不過(guò)去了。而對(duì)一個(gè)的讀寫(xiě)也會(huì)有響應(yīng)的描述符,稱(chēng)為文件描述符,描述符就是一個(gè)數(shù)字,指向內(nèi)核中的一個(gè)結(jié)構(gòu)體文件路徑,數(shù)據(jù)區(qū)等一些屬性。 前言 只有光頭才能變強(qiáng) 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡(jiǎn)單啦 本來(lái)我預(yù)想是先來(lái)回顧一下傳統(tǒng)的IO模式的,將傳統(tǒng)的IO模式的相關(guān)類(lèi)理清楚(因?yàn)镮O的類(lèi)很多)。 但是,發(fā)現(xiàn)在整理的過(guò)程已...

    YFan 評(píng)論0 收藏0
  • NIO網(wǎng)絡(luò)相關(guān)基礎(chǔ)知識(shí)

    摘要:操作系統(tǒng)是能夠獲取到事件操作完成的事件,基于回調(diào)函數(shù)機(jī)制和操作系統(tǒng)的操作控制實(shí)現(xiàn)事件檢測(cè)機(jī)制。 前面的文章NIO基礎(chǔ)知識(shí)介紹了Java NIO的一些基本的類(lèi)及功能說(shuō)明,Java NIO是用來(lái)替換java 傳統(tǒng)IO的,NIO的一些新的特性在網(wǎng)絡(luò)交互方面會(huì)更加的明顯。 Java 傳統(tǒng)IO的弊端 ????基于JVM來(lái)實(shí)現(xiàn)每個(gè)通道的輪詢(xún)檢查通道狀態(tài)的方法是可行的,但仍然是有問(wèn)題的,檢查每個(gè)通道...

    1fe1se 評(píng)論0 收藏0
  • 動(dòng)力節(jié)點(diǎn)JavaNIO教程,輕松攻破Java NIO技術(shù)壁壘

    摘要:學(xué)習(xí)和掌握技術(shù)已經(jīng)不是一個(gè)攻城獅的加分技能,而是一個(gè)必備技能。是雙向的,不僅可以讀取數(shù)據(jù)還能保存數(shù)據(jù),程序不能直接讀寫(xiě)通道,只與緩沖區(qū)交互為了讓大家不被高并發(fā)與大量連接處理問(wèn)題所困擾,動(dòng)力節(jié)點(diǎn)推出了高效處理模型應(yīng)用教程。 大家肯定了解Java IO, 但是對(duì)于NIO一般是陌生的,而現(xiàn)在使用到NIO的場(chǎng)景越來(lái)越多,很多技術(shù)框...

    ralap 評(píng)論0 收藏0
  • Java NIO 基礎(chǔ)(一)

    摘要:通過(guò)協(xié)議向網(wǎng)絡(luò)讀寫(xiě)數(shù)據(jù)通過(guò)協(xié)議向網(wǎng)絡(luò)讀寫(xiě)數(shù)據(jù)以一個(gè)服務(wù)器的形式,監(jiān)聽(tīng)到來(lái)的連接,對(duì)每個(gè)連接建立一個(gè)。 Java NIO 教程 NIO是什么? 它是Java1.4之后出現(xiàn)的IO API,與傳統(tǒng)IO和網(wǎng)絡(luò)API不同,具有非阻塞的特點(diǎn)。 在BIO中我們使用字節(jié)流和字符流。NIO中我們使用channel和buffer。數(shù)據(jù)總是從一個(gè)channel中讀取到buffer中,或者從buffer中寫(xiě)入...

    hizengzeng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<