談談MappedByteBuffer和FileChannel兩者的使用方法

在談這兩者之前,我先說RandomAccessFile的用法。

RandomAccessFile

RandomAccessFile rfile=new RandomAccessFile(mapFile, "rw");

隨機讀取文件,它的一個實例相當於一個隱含的大數組,當數組裝滿的時候,它會自動的進行擴充。第二個參數代表了mode,用來指定對文件的操作權限。

第一個參數呢?

單純只是一個File對象而已。File file。


爲什麼要先講RandomAccessFile呢?

因爲它的getChannel()函數會返回一個FileChannel對象。

Channel意味通道,渠道。

FileChannel對象是幹什麼的呢?

主要有以上四種功能。

1. 緩衝區的字節可以通過絕對路徑被讀寫,而當前channel的位置不受影響。

2.一個文件的區塊能夠被直接映射到內存中去,特別對大文件來說,更加高效。

3.文件的更新能夠被強制寫到下層的存儲區域。

4.字節能夠在文件和channel之間自由的轉移,並且非常的高效快速。

 

那麼問題來了,利用Filechannel進行文件映射的過程是什麼樣的?

利用filechannel.map()進行映射。

 


 

水到渠成的,MappedByteBuffer就是用來接收map()函數對File映射之後的那個Buffer的。

所以第一個是索引的值,第二個是一個byte value。

buffer被創建的時候,10個byte位全是空的。

 

學姐在此處,對buffer這個字節數組進行了 byte 0 的初始化操作。注意,ta把0位當做是讀寫位。所以在寫之前置1,在寫完成之後置0。當然在後面的讀操作之前,學姐也進行了置1的操作。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章