日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
關于JAVA中NIO緩沖區(qū)簡介-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!

成都創(chuàng)新互聯(lián)一直通過網(wǎng)站建設和網(wǎng)站營銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實效"的一站式服務,以網(wǎng)站設計制作、做網(wǎng)站、移動互聯(lián)產(chǎn)品、營銷型網(wǎng)站服務為核心業(yè)務。十余年網(wǎng)站制作的經(jīng)驗,使用新網(wǎng)站建設技術(shù),全新開發(fā)出的標準網(wǎng)站,不但價格便宜而且實用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡單易用,維護方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設的選擇。

這篇文章主要介紹關于JAVA中NIO緩沖區(qū)簡介,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

當我們需要與 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ū)基礎

Buffer 類型有:

關于JAVA中NIO緩沖區(qū)簡介

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

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

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

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

關于JAVA中NIO緩沖區(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緩沖區(qū)簡介

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

Buffer的基本用法

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

  1. 寫入數(shù)據(jù)到Buffer
  2. 調(diào)用flip()方法
  3. 從Buffer中讀取數(shù)據(jù)
  4. 調(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();
   }
 }

網(wǎng)頁名稱:關于JAVA中NIO緩沖區(qū)簡介-創(chuàng)新互聯(lián)
本文來源:http://www.dlmjj.cn/article/dpcchj.html