FileChannel#map
ファイルをマップする (つまり、メモリ マップを開始する) ために使用される は、long
長さパラメーターとして受け取ります。
それでも、ドキュメントにFileChannel#map
は次のよう に書かれています。
size - マップされる領域のサイズ。負ではなく、Integer.MAX_VALUE 以下でなければなりません
まず第一に、最大値しか許可しないのに、そもそも long を使用するのはなぜInteger.MAX_VALUE
ですか? それよりも大きなファイルを一度にマップすることは何とか可能ですか?
たとえば、10GB のファイルをマップしたい場合、次のように書きたいと思います (InvalidArgumentException
長すぎるために最終的には になります)。
long length = 10_000_000_000;
MappedByteBuffer buffer = (new RandomAccessFile("./memory.map", "rw")).getChannel().map(FileChannel.MapMode.READ_WRITE, 0, length);
そのために連続したメモリ マップを作成する必要がありますか。