Java 通过缓冲垫调整大小、冲洗和关闭

Java 通过缓冲垫调整大小、冲洗和关闭,java,flush,memory-mapped-files,mappedbytebuffer,Java,Flush,Memory Mapped Files,Mappedbytebuffer,这实际上是关于如何使用内存映射文件的三个问题。我所做的很有效,但我缺少一个权威的答案 我的ByteBuffer如下所示: raf = new RandomAccessFile(file, isReadonly ? "r" : "rw"); channel = raf.getChannel(); buffer = channel.map(mode, 0, channel.size()); 对于调整大小,以下方法似乎有效 raf.setLength(newLength); channel = ra

这实际上是关于如何使用内存映射文件的三个问题。我所做的很有效,但我缺少一个权威的答案

我的
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(),但它真的正确吗


根据,调用
force
应该刷新它(我使用的是本地驱动器)。我只是想知道它是如何声明no
IOException
的,如果它失败了会发生什么


我必须关闭什么?
RandomAccessFile
FileChannel
,还是两者都有?我必须先调用一些
flush
MappedByteBuffer.force

对于调整大小,以下方法似乎有效

raf.setLength(newLength);
channel = raf.getChannel();
没有调用raf.getChannel(),但它真的正确吗

对。你不需要重新获得频道。在
setLength()之后仍然有效

根据Javadoc,调用
force()
应该刷新它(我使用的是本地驱动器)。我只是想知道它是如何声明no
IOException
的,如果它失败了会发生什么

你似乎在这里谈论的是。我无法解释设计师的选择

我必须关闭什么?RandomAccessFile、FileChannel或两者

他们中的任何一个

我是否必须在之前调用一些
flush()
MappedByteBuffer.force()

没有
flush()
。如果愿意,可以调用
force()
,否则更改可能会延迟

对于调整大小,以下方法似乎有效

raf.setLength(newLength);
channel = raf.getChannel();
没有调用raf.getChannel(),但它真的正确吗

对。你不需要重新获得频道。在
setLength()之后仍然有效

根据Javadoc,调用
force()
应该刷新它(我使用的是本地驱动器)。我只是想知道它是如何声明no
IOException
的,如果它失败了会发生什么

你似乎在这里谈论的是。我无法解释设计师的选择

我必须关闭什么?RandomAccessFile、FileChannel或两者

他们中的任何一个

我是否必须在之前调用一些
flush()
MappedByteBuffer.force()

没有
flush()
。如果愿意,可以调用
force()
,否则更改可能会延迟