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 に答える