java byteBuffer 的學習

來源:互聯網
上載者:User

1.對java.nio包的理解

java.nio.*包中引入了新的JavaI/O類庫 為了提高IO讀寫速度。用緩衝和通道更加接近作業系統的IO方式

我們要讀取到資料,並沒有直接和通道互動;只是和緩衝器互動,並把緩衝器派送到通道。通道要麼從緩衝器獲得資料,要麼向緩衝器發送資料!

   使用者資料讀寫<-->ByteBuffer<--->FileChannel 

2.緩衝區

特定基本類型元素的線性有限序列。除內容外,緩衝區的基本屬性還包括容量、限制和位置

讀寫資料時候 本質就是從此緩衝區的“位置”處一直讀到“限制”處!

3. FileChannel的read(ByteBuffer bf):將位元組序列從FileChannel讀入給定的緩衝區ByteBuffer bf 中!讀完以後,bf的當前位置就是從FileChannel中讀取的位元組個數! 

  同理,我們應該可以很容易想象出write(ByteBuffer bf)它就是用來將位元組序列從給定的緩衝區ByteBuffer bf寫入通道FileChannel

3. ByteBuffer 和通道交換作用

  通過告知分配多少儲存空間來建立一個ByteBuffer對象

    ByteBuffer的flip():反轉此緩衝區,將限制設定為當前位置,然後將位置設定為 0 !(本質就是設定buff開始位置和結束位置 以便後面可以讀寫buff)

 

4.代碼實現

FileChannel fc = new FileOutputStream("s.txt").getChannel();<br />fc.write(ByteBuffer.wrap("Some text".getBytes()));//將 byte 數組封裝到緩衝區中buff中去,然後寫到fc中去<br />fc.close();<br />fc = new RandomAccessFile("s.txt", "rw").getChannel();<br />fc.position(fc.size());//到最後位置然後 後面的byte加到後面<br />fc.write(ByteBuffer.wrap("Some more".getBytes()));<br />fc.close();<br />fc = new FileInputStream("s.txt").getChannel();<br />ByteBuffer buff = ByteBuffer.allocate(BSIZE);<br />fc.read(buff);<br />buff.flip();<br />while (buff.hasRemaining()) {// 是否到達限定的位置<br />System.out.println((char) buff.get());<br />} 

 

總結如下:
1. put 資料時, 不會自動清除緩衝區中現有的資料.
2. 每一次 get 或 put 後, curPointer 都將向緩衝區尾部移動, 移動量=操作的資料量.
3. get/put 均是從 curPointer 起, 到 curPointer + 操作的資料長度止.
4. get/put 操作中, 若 curPointer 超過了 endPointer 或緩衝區總長度, 將拋出 java.nio.BufferUnderflowException 異常.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.