簡體   English   中英

調整大小,刷新和關閉ByteBuffer

[英]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以及如果它失敗會發生什么?


我該怎么辦? RandomAccessFileFileChannel ,還是兩者兼而有之? 我之前是否需要調用一些flushMappedByteBuffer.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM