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