13

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

4

1 回答 1

12

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

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 上)。如果这是不受欢迎的行为,您需要将数据附加到文件中才能真正增大文件。

于 2010-06-12T12:09:41.433 回答