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

2022-09-04 21:47:20

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


答案 1

否,您需要调整基础文件的大小并重新创建内存映射字节缓冲区。

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 在文件末尾以外的特定位置(使用 map.position() 或 map.putX(position, ...))写入文件,则值将附加到文件末尾,而不是写入您期望的位置(至少在 linux 上)。如果这是不希望的行为,则需要将数据追加到文件中,以便真正增大文件。


答案 2

推荐