日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

詳細了解JAVA NIO之Buffer(緩沖區(qū))

瀏覽:23日期:2022-08-29 18:55:47

當我們需要與 NIO Channel 進行交互時, 我們就需要使用到 NIO Buffer, 即數(shù)據(jù)從 Buffer讀取到 Channel 中, 并且從 Channel 中寫入到 Buffer 中。緩沖區(qū)本質(zhì)上是一塊可以寫入數(shù)據(jù),然后可以從中讀取數(shù)據(jù)的內(nèi)存。這塊內(nèi)存被包裝成NIO Buffer對象,并提供了一組方法,用來方便的訪問該塊內(nèi)存。

緩沖區(qū)基礎(chǔ)

Buffer 類型有:

詳細了解JAVA NIO之Buffer(緩沖區(qū))

緩沖區(qū)是包在一個對象內(nèi)的基礎(chǔ)數(shù)據(jù)的數(shù)組,Buffer類相比一般簡單數(shù)組而言其優(yōu)點是將數(shù)據(jù)的內(nèi)容和相關(guān)信息放在一個對象里面,這個對象提供了處理緩沖區(qū)數(shù)據(jù)的豐富的API。

所有緩沖區(qū)都有4個屬性:capacity、limit、position、mark,并遵循:capacity>=limit>=position>=mark>=0,下面是對這4個屬性的解釋:

Capacity: 容量,即可以容納的最大數(shù)據(jù)量;在緩沖區(qū)創(chuàng)建時被設(shè)定并且不能改變 Limit: 上界,緩沖區(qū)中當前數(shù)據(jù)量 Position: 位置,下一個要被讀或?qū)懙脑氐乃饕? Mark: 標記,調(diào)用mark()來設(shè)置mark=position,再調(diào)用reset()可以讓position恢復到標記的位置即position=mark

我們通過一個簡單的操作流程來說明buffer的使用,下圖是新創(chuàng)建的容量為10的緩沖區(qū)邏輯視圖:

詳細了解JAVA NIO之Buffer(緩沖區(qū))

然后進行5次調(diào)用put:

buffer.put((byte)’A’).put((byte)’B’).put((byte)’C’).put((byte)’D’).put((byte)’E’)

5次調(diào)用put之后的緩沖區(qū)為:

詳細了解JAVA NIO之Buffer(緩沖區(qū))

現(xiàn)在緩沖區(qū)滿了,我們必須將其清空。我們想把這個緩沖區(qū)傳遞給一個通道,以使內(nèi)容能被全部寫出,但現(xiàn)在執(zhí)行g(shù)et()無疑會取出未定義的數(shù)據(jù)。我們必須將 posistion設(shè)為0,然后通道就會從正確的位置開始讀了,但讀到哪算讀完了呢?這正是limit引入的原因,它指明緩沖區(qū)有效內(nèi)容的未端。這個操作 在緩沖區(qū)中叫做翻轉(zhuǎn):buffer.flip()。

Buffer的基本用法

使用Buffer讀寫數(shù)據(jù)一般遵循以下四個步驟:

寫入數(shù)據(jù)到Buffer 調(diào)用flip()方法 從Buffer中讀取數(shù)據(jù) 調(diào)用clear()方法或者compact()方法

當向buffer寫入數(shù)據(jù)時,buffer會記錄下寫了多少數(shù)據(jù)。

一旦要讀取數(shù)據(jù),需要通過flip()方法將Buffer從寫模式切換到讀模式。在讀模式下,可以讀取之前寫入到buffer的所有數(shù)據(jù)。

一旦讀完了所有的數(shù)據(jù),就需要清空緩沖區(qū),讓它可以再次被寫入。有兩種方式能清空緩沖區(qū):調(diào)用clear()或compact()方法。clear()方法會清空整個緩沖區(qū)。compact()方法只會清除已經(jīng)讀過的數(shù)據(jù)。任何未讀的數(shù)據(jù)都被移到緩沖區(qū)的起始處,新寫入的數(shù)據(jù)將放到緩沖區(qū)未讀數(shù)據(jù)的后面。

下面我們看一段程序來看一下Buffer的基本用法:

public static void readFile(String fileName) { RandomAccessFile aFile = null; try { //文件流 aFile = new RandomAccessFile(fileName, 'rw'); //將文件輸入到管道 FileChannel inChannel = aFile.getChannel(); //為buffer分配1024個字節(jié)大小的空間 ByteBuffer buf = ByteBuffer.allocate(1024); //將buffer中的內(nèi)容讀取到管道中 int bytesRead = inChannel.read(buf); while (bytesRead != -1) { //反轉(zhuǎn)buffer,將寫模式改為讀模式 buf.flip(); while (buf.hasRemaining()) {//獲取buffer中的數(shù)據(jù)System.out.print((char) buf.get()); } //將上次分配的1024字節(jié)的內(nèi)容清空,為下次接收做準備 buf.clear(); //管道重新讀取buffer中的內(nèi)容 bytesRead = inChannel.read(buf); } aFile.close(); } catch (Exception e) { e.printStackTrace(); } }

字節(jié)緩沖區(qū)

我們將進一步觀察字節(jié)緩沖區(qū)。所有的基本數(shù)據(jù)類型都有相應的緩沖區(qū)類(布爾型除外),但字節(jié)緩沖區(qū)有自己的獨特之處。字節(jié)是操作系統(tǒng)及其I/O設(shè)備使用的基本數(shù)據(jù)類型。當在JVM和操作系統(tǒng)間傳遞數(shù)據(jù)時,將其他的數(shù)據(jù)類型拆分成構(gòu)成它們的字節(jié)是十分必要的。如我們在后面的章節(jié)中將要看到的那樣,系統(tǒng)層次的I/O面向字節(jié)的性質(zhì)可以在整個緩沖區(qū)的設(shè)計以及它們互相配合的服務中感受到。

直接緩沖區(qū)

我們知道操作系統(tǒng)是在內(nèi)存中進行I/O操作,這些內(nèi)存區(qū)域,就操作系統(tǒng)方面而言,是相連的字節(jié)序列。于是,毫無疑問,只有字節(jié)緩沖區(qū)有資格參與I/O操作。即操作系統(tǒng)會直接存取進程,那么我們現(xiàn)在在JVM中進行操作,java中的內(nèi)存空間是由JVM直接進行管理,但是在JVM中,字節(jié)數(shù)組可能不會在內(nèi)存中連續(xù)存儲,或者無用存儲單元收集可能隨時對其進行移動,這就不能保證I/O操作的目標是連續(xù)的。

出于這一原因,引入了直接緩沖區(qū)的概念。直接緩沖區(qū)被用于與通道和固有I/O例程交互。它們通過使用固有代碼來告知操作系統(tǒng)直接釋放或填充內(nèi)存區(qū)域,對用于通道直接或原始存取的內(nèi)存區(qū)域中的字節(jié)元素的存儲盡了最大的努力。

直接字節(jié)緩沖區(qū)通常是I/O操作最好的選擇。在設(shè)計方面,它們支持JVM可用的最高效I/O機制。非直接字節(jié)緩沖區(qū)可以被傳遞給通道,但是這樣可能導致性能損耗。通常非直接緩沖不可能成為一個本地I/O操作的目標。如果您向一個通道中傳遞一個非直接ByteBuffer對象用于寫入,通道可能會在每次調(diào)用中隱含地進行下面的操作:

創(chuàng)建一個臨時的直接ByteBuffer對象。 將非直接緩沖區(qū)的內(nèi)容復制到臨時緩沖中。 使用臨時緩沖區(qū)執(zhí)行低層次I/O操作。 臨時緩沖區(qū)對象離開作用域,并最終成為被回收的無用數(shù)據(jù)。

視圖緩沖區(qū)

就像我們已經(jīng)討論的那樣,I/O基本上可以歸結(jié)成組字節(jié)數(shù)據(jù)的四處傳遞。在進行大數(shù)據(jù)量的I/O操作時,很又可能你會使用各種ByteBuffer類去讀取文件內(nèi)容,接收來自網(wǎng)絡連接的數(shù)據(jù),等等。一旦數(shù)據(jù)到達了你的ByteBuffer,您就需要查看它以決定怎么做或者在將它發(fā)送出去之前對它進行一些操作。ByteBuffer類提供了豐富的API來創(chuàng)建視圖緩沖區(qū)。

視圖緩沖區(qū)通過已存在的緩沖區(qū)對象實例的工廠方法來創(chuàng)建。這種視圖對象維護它自己的屬性,容量,位置,上界和標記,但是和原來的緩沖區(qū)共享數(shù)據(jù)元素。但是ByteBuffer類允許創(chuàng)建視圖來將byte型緩沖區(qū)字節(jié)數(shù)據(jù)映射為其它的原始數(shù)據(jù)類型。例如,asLongBuffer()函數(shù)創(chuàng)建一個將八個字節(jié)型數(shù)據(jù)當成一個long型數(shù)據(jù)來存取的視圖緩沖區(qū)。

但是使用視圖緩沖區(qū)的話,一旦ByteBuffer對于視圖的維護對象產(chǎn)生非常規(guī)行的使用,那么對于工廠方法創(chuàng)建的緩沖區(qū)而言,asLongBuffer()函數(shù)就不在使用這個視窗,那么這個8字節(jié)的數(shù)據(jù)當成一個long類型的數(shù)據(jù)類型來存取的數(shù)據(jù)視圖。

以上就是詳細了解JAVA NIO之Buffer(緩沖區(qū))的詳細內(nèi)容,更多關(guān)于JAVA NIO buffer(緩沖區(qū))的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产伦理久久久久久妇女| 一区二区高清| 国产精品99久久久久久董美香| 日本久久二区| 国产精品一区二区av交换| 久久不见久久见免费视频7| 欧美国产另类| 久久国产影院| 老司机久久99久久精品播放免费| 亚洲精品伊人| 欧美黑人做爰爽爽爽| 极品av在线| 欧美日韩精品免费观看视频完整| 欧美高清不卡| 日韩精品久久久久久久软件91| 免费在线亚洲欧美| 欧洲激情综合| 欧美日韩一区二区三区不卡视频 | 国产精品4hu.www| 97精品一区二区| 国产亚洲午夜| 国产精品99久久免费观看| 亚洲不卡系列| 日本v片在线高清不卡在线观看| 六月丁香综合在线视频| 美女毛片一区二区三区四区| 亚洲人成在线影院| 国产精品久久国产愉拍| 日韩电影在线视频| 一二三区精品| 荡女精品导航| 丝袜美腿一区二区三区| 欧美精品97| 亚洲一区成人| 高清av一区| 日韩高清电影一区| 国精品一区二区| 国产精品白丝久久av网站| 91成人精品| 国产在线视频欧美一区| 亚洲日产国产精品| 成人看片网站| 亚洲18在线| 激情综合自拍| 国产精品入口久久| 日韩专区在线视频| 欧美不卡高清| 国产精品**亚洲精品| 香蕉成人久久| 日韩成人综合| 美女视频黄久久| 亚洲精品第一| 不卡一区综合视频| 国际精品欧美精品| 日韩精品社区| 亚洲一卡久久| 欧美香蕉视频| 国产调教精品| 男女精品网站| 国产综合色产| 亚洲三级欧美| 国内精品美女在线观看| 日韩不卡一区二区三区 | 99在线精品免费视频九九视| 福利一区二区免费视频 | 欧美国产日韩电影| 亚洲乱亚洲高清| 性欧美长视频| 久久亚洲国产| 麻豆网站免费在线观看| 国产精品男女| 欧美中文高清| 亚洲免费专区| 视频一区在线视频| 亚洲一区二区三区高清| 国内激情久久| 亚洲调教视频在线观看| 在线一区视频观看| 九色porny丨国产首页在线| 风间由美中文字幕在线看视频国产欧美| 日本欧美久久久久免费播放网| 鲁大师成人一区二区三区| 国产精品7m凸凹视频分类| 99久久精品费精品国产| 麻豆理论在线观看| 狠狠躁少妇一区二区三区| 麻豆视频在线看| 美女网站视频一区| 亚洲一级特黄| 欧美日韩国产亚洲一区| 黄色成人精品网站| 免费中文字幕日韩欧美| 免费成人在线影院| 蜜臀av亚洲一区中文字幕| 蜜桃传媒麻豆第一区在线观看 | 影院欧美亚洲| 99热精品在线| 在线国产一区二区| 老司机精品久久| 久久大逼视频| 一区二区不卡| 国产探花一区在线观看| 国产精品成人**免费视频| 精品欠久久久中文字幕加勒比| 精品国产欧美| 精品欧美一区二区三区在线观看| 亚洲四虎影院| 亚洲欧美日韩一区在线观看| 久久99伊人| 日韩久久99| 久久99高清| 一区二区三区四区在线看| 亚洲韩日在线| 免费久久精品视频| 国产精品久久久久久久久久妞妞 | 亚洲成人不卡| 在线亚洲观看| 911亚洲精品| 老司机精品在线| 久久久久午夜电影| 免费成人在线观看| 国产精久久一区二区| 精品网站999| 久久久精品午夜少妇| 欧美综合国产| 国产精品亚洲综合久久| 国产精品蜜芽在线观看| av亚洲在线观看| 日本aⅴ亚洲精品中文乱码| 成人在线观看免费视频| 欧美日韩四区| 国产精品一区二区中文字幕| 日韩伦理福利| 鲁大师成人一区二区三区| 久久国产欧美日韩精品| 欧美日韩在线观看首页| 久久福利毛片| 国产亚洲欧美日韩精品一区二区三区| 久久免费精品| 99视频精品| 久久男人av| 99综合视频| 美女毛片一区二区三区四区最新中文字幕亚洲 | 亚洲精品一级| 国产一区二区三区四区大秀| 亚洲免费中文| 麻豆成人在线观看| 美女网站久久| 国精品产品一区| 免费在线观看日韩欧美| 都市激情国产精品| 日韩高清不卡在线| 亚洲福利久久| 国产日韩中文在线中文字幕| 久久精品欧美一区| 国产精品欧美一区二区三区不卡| 欧美中文字幕一区二区| 久久wwww| 综合欧美亚洲| www在线观看黄色| 午夜久久免费观看| 嫩草伊人久久精品少妇av杨幂| 香蕉久久夜色精品国产| 久久精品一本| 一区二区亚洲视频| 久久久久国产精品一区三寸| 日韩三区四区| 中文一区二区| 亚洲成人国产| 精品视频一区二区三区在线观看 | 亚洲综合小说| 欧美日韩中文一区二区| 精品视频一区二区三区四区五区| 亚洲人成亚洲精品| 亚洲香蕉网站| 福利一区和二区| 国产日韩一区二区三免费高清| 免费一区二区视频| 日韩一级不卡| 欧美手机在线| 久久婷婷丁香| 五月天av在线| 国产suv精品一区| 国产精品亚洲人成在99www | 亚洲激情av| 91精品久久久久久久久久不卡| 国产精品手机在线播放| 亚洲精品日韩久久| 丝袜美腿亚洲一区二区图片| 亚洲视频综合| 日韩免费在线| 日韩欧美另类一区二区| 久久免费精品| 国产欧美亚洲精品a| 人人爱人人干婷婷丁香亚洲| 少妇精品久久久| 亚洲欧美日韩国产| 亚洲欧洲一区二区天堂久久| 精品一区在线| 国产偷自视频区视频一区二区|