第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

調(diào)用java 中的MappedByteBuffer的put方法,是直接寫入磁盤么?

調(diào)用java 中的MappedByteBuffer的put方法,是直接寫入磁盤么?

Qyouu 2019-03-14 18:14:30
RT.想測試下MappedByteBuffer的put方法會(huì)不會(huì)寫入磁盤,如下:FileChannel filechannel=new RandomAccessFile("mydata","rw").getChannel();MappedByteBuffer mappedbytebuffer=filechannel.map(FileChannel.MapMode.READ_WRITE, 0, 10);mappedbytebuffer.put((byte)'a');mappedbytebuffer.put((byte)'b');mappedbytebuffer.put((byte)'c');在每次put的時(shí)候加個(gè)斷點(diǎn),同時(shí)看磁盤上的數(shù)據(jù),確實(shí)是每次都發(fā)生了變化.和預(yù)想的不一樣,本來以為put不會(huì)立刻改變磁盤數(shù)據(jù)(pagecache), 要用force才能刷到磁盤.這是啥原因?
查看完整描述

1 回答

?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊

說穿了其實(shí)灰常簡單了. 你"同時(shí)看磁盤上的數(shù)據(jù)"的時(shí)候, 沒有繞過操作系統(tǒng) 去查看文件吧? 所以看到的還是 操作系統(tǒng)的文件緩存里的內(nèi)容. 所以你上面的測試肯定是你現(xiàn)在的結(jié)論.

想要看到你要的結(jié)果, 可能的方法: 寫文件后直接 電腦斷電/拔掉硬盤/把windows搞藍(lán)屏. 然后重啟機(jī)器后去看 文件內(nèi)容是否改變了...


有一個(gè)很簡單的方法! 上優(yōu)盤, debug停住之后, 立刻拔掉優(yōu)盤! 然后連上優(yōu)盤, 可以看到?jīng)]有寫入!


正好結(jié)合這個(gè)問題記一下我對文件緩存的理解. 有誤請幫我指出.

我們一般說文件緩存, 其實(shí)是有兩個(gè)緩存;

一個(gè)是 application層面的, 使用fflush(c), Writer.flush(java) 來 清空緩存到 OS層面;

一個(gè)是 OS 層面的, 使用fsync/msync(c), FileChannel.force/FileDescriptor.sync(java) 來清空緩存到 文件系統(tǒng).


查看完整回答
反對 回復(fù) 2019-04-15
  • 1 回答
  • 0 關(guān)注
  • 335 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)