[英]Resizing, flushing and closing 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
以及如果它失敗會發生什么?
我該怎么辦? RandomAccessFile
, FileChannel
,還是兩者兼而有之? 我之前是否需要調用一些flush
或MappedByteBuffer.force
?
為了調整大小,以下似乎可行
raf.setLength(newLength);
channel = raf.getChannel();
沒有調用raf.getChannel(),但它是否真的正確?
是。 您無需重新獲取頻道。 它在setLength()
之后仍然有效。
根據Javadoc,調用
force()
應該刷新它(我正在使用本地驅動器)。 我只是想知道它是如何聲明沒有IOException
以及如果它失敗會發生什么?
你似乎在這里談論MappedByteBuffer.force() 。 我無法解釋設計師的選擇。
我該怎么辦? RandomAccessFile,FileChannel,還是兩者兼而有之?
任何一位。
我以前必須調用一些
flush()
或MappedByteBuffer.force()
嗎?
沒有flush()
。 如果您願意,可以調用force()
,否則更改可能會延遲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.