扩展 Java 内存映射字节缓冲区
2022-09-04 21:47:20
有没有办法扩展 Java 内存映射的字节缓冲区,以便将新大小反射回磁盘上的映射文件?
有没有办法扩展 Java 内存映射的字节缓冲区,以便将新大小反射回磁盘上的映射文件?
否,您需要调整基础文件的大小并重新创建内存映射字节缓冲区。
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 上)。如果这是不希望的行为,则需要将数据追加到文件中,以便真正增大文件。