扩展Java内存映射字节缓冲区

时间:2010-06-12 11:40:32

标签: java expand memory-mapped-files

有没有办法扩展Java内存映射字节缓冲区,以便将新大小反射回磁盘上的映射文件?

1 个答案:

答案 0 :(得分:10)

不,您需要调整底层文件的大小并重新创建Memory Mapped Byte Buffer。

RandomAccessFile file = new RandomAccessFile(/* some file */);
MappedByteBuffer buffer = file.getChannel().map(MapMode.READ_WRITE, 0, file.length());

// Some stuff happens...

// adjust the size
file.setLength(newLength);

// recreate the memory mapped buffer
buffer = file.getChannel().map(MapMode.READ_WRITE, 0, file.length());

注意:设置文件长度有一些奇怪的行为。如果您通过地图在超出文件末尾的特定位置(使用map.position()或map.putX(position,...))写入文件,则值将附加到结尾该文件并没有写在您期望的位置(至少在linux上)。如果这是不希望的行为,您需要将数据附加到文件中,以便真正增长文件。