質問

新しいサイズがディスク上のマップされたファイルへのバックを反映するように、バッファの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