有一种方法,以扩展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.position()或map.putX(位置,...))值将被追加到年底该文件,而不是你希望(在Linux至少)的位置写入。如果这是意外的行为,则需要以将数据追加到文件真正成长档案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top