gee*_*eko 11 java expand memory-mapped-files
有没有办法扩展Java内存映射字节缓冲区,以便新的大小反映回磁盘上的映射文件?
Mic*_*ker 10
不,您需要调整底层文件的大小并重新创建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());
Run Code Online (Sandbox Code Playgroud)
注意:设置文件长度有一些奇怪的行为.如果您通过地图在超出文件末尾的特定位置(使用map.position()或map.putX(position,...))写入文件,则值将附加到结尾该文件并没有写在您期望的位置(至少在linux上).如果这是不希望的行为,您需要将数据附加到文件以真正增长文件.
| 归档时间: |
|
| 查看次数: |
5563 次 |
| 最近记录: |