有没有办法扩展Java内存映射字节缓冲区,以便将新大小反射回磁盘上的映射文件?
答案 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上)。如果这是不希望的行为,您需要将数据附加到文件中,以便真正增长文件。