MappedByteBufferの2GIGへのJavaの制限により、大きなファイルのマッピングに使用するのは困難です。通常推奨されるアプローチは、MappedByteBufferの配列を使用し、次の方法でインデックスを作成することです。
long PAGE_SIZE = Integer.MAX_VALUE;
MappedByteBuffer[] buffers;
private int getPage(long offset) {
return (int) (offset / PAGE_SIZE)
}
private int getIndex(long offset) {
return (int) (offset % PAGE_SIZE);
}
public byte get(long offset) {
return buffers[getPage(offset)].get(getIndex(offset));
}
これは1バイトで機能する可能性がありますが、より大きく、境界を越える必要がある読み取り/書き込み(getLong()またはget(byte []))を処理する場合は、多くのコードを書き直す必要があります。
質問:この種のシナリオのベストプラクティスは何ですか?車輪の再発明をせずに再利用できる実用的なソリューション/コードを知っていますか?