2017-02-14 100 views
1

這些實際上是關於如何處理內存映射文件的三個問題。我所做的工作,但我錯過了一個權威的答案。調整大小,刷新和關閉ByteBuffer

我得到我的ByteBuffer喜歡如下:

raf = new RandomAccessFile(file, isReadonly ? "r" : "rw"); 
channel = raf.getChannel(); 
buffer = channel.map(mode, 0, channel.size()); 

調整大小,下面似乎工作

raf.setLength(newLength); 
channel = raf.getChannel(); 

,而不調用raf.getChannel(),但是不是真的正確嗎?


按照Javadoc,呼籲force應該清空它(我使用一個本地驅動器)。我只是想知道它是怎麼來的,它宣稱沒有IOException如果失敗會發生什麼?


我要結束什麼? RandomAccessFileFileChannel或者他們倆?我之前必須撥打flushMappedByteBuffer.force嗎?

回答

0

調整大小,下面似乎工作

raf.setLength(newLength); 
channel = raf.getChannel(); 

不調用raf.getChannel(),但是否真的正確嗎?

是的。您不需要重新獲取頻道。它在setLength()之後仍然有效。

根據Javadoc,調用force()應刷新它(我使用本地驅動器)。我只是想知道它是怎麼來的,它宣稱沒有IOException,如果它失敗會發生什麼?

您好像在這裏談論MappedByteBuffer.force()。我無法解釋設計師的選擇。

我要結束什麼? RandomAccessFile,FileChannel或它們兩個?

其中任何一個。

以前我必須撥打一些flush()MappedByteBuffer.force()嗎?

沒有flush()。如果您願意,可以撥打force(),否則更改可能會延遲。

相關問題