提高io效率, 很多文件中提到這一點,具體大家可以自行測試。
mapmode.read_only:唯讀對映
mapmode.read_write:讀寫對映
mapmode.private:copy on write對映,一旦需要改變原有buffer,拷貝乙份原來的
public class mmaptest
@afterclass
public static void runafterclass() throws ioexception
@before
public void runbeforeeverytest() throws ioexception
/***
* @author weip.pengw
* @time 2012-3-19 下午02:53:21
* @param buffer
* @throws exception
*/public static string dumpbuffer(bytebuffer buffer) throws exception
if (nulls != 0)
} return sb.tostring();
} /**
* * @author weip.pengw
* @throws exception
* @time 2012-3-19 下午02:45:28
*/@test
public void testcopyonwrite() throws exception
重點看看**中的測試方法testcopyonwrite
1)產生乙個較大空洞檔案(本文操過8k),使得作業系統(**在ubuntu10.04測試通過)無法在一頁能對映該檔案(跨記憶體頁),這樣才會有測試效果
mapmode.read_write模式簡稱rw,乙個是
filechannel.mapmode.private模式簡稱cow
3) 測試之前,兩個buff例項內容一致
4)第1步測試修改rw例項,由於沒有觸發copy on write,所以兩個buff例項內容一致
5) 第2步測試修改cow例項的前幾個位元組,cow的修改只影響它本身,因為它修改的時候實際上重新拷貝了乙份
6)第3步測試修改rw例項的後幾個位元組,居然在cow例項中能看到,之前不是說cow拷貝了乙份嗎?原因後面說
7)第4步測試修改cow例項的後幾個位元組,cow的修改只影響它本身
8)第5步測試修改rw例項的前後位元組,發現都沒反映在cow例項中,的確和6)有所不同。
這說明:
理解java中的mmap
提高io效率,很多文件中提到這一點,具體大家可以自行測試。mapmode.read only 唯讀對映 mapmode.read write 讀寫對映 mapmode.private copy on write對映,一旦需要改變原有buffer,拷貝乙份原來的 public class mmapte...
golang中的mmap使用
mmap的原理參考 下面是乙個簡單的小例子 package main import fmt golang.org x exp mmap func main buff make byte,10 讀入的長度為slice預設的長度,0是offset。缺省長度過長將會用0填充。at.readat buff,...
linux 中mmap的用法
函式 void mmap void start,size t length,int prot,int flags,int fd,off t offsize 引數start 指向 函式 void mmap void start,size t length,int prot,int flags,int ...