質問

私は、私が使用しているライブラリにいくつかの変更を加える過程にあります。メモリの使用量を削減するために、ライブラリはメモリに保つのではなく、一時的なデータをディスクに書き込みます。ただし、私の使用シナリオでは、メモリに保つ方が効率的です。また、いくつかの並行性の問題があります。これは、一時的なファイルの一定の名前があり、したがって異なるスレッドで同時に実行できないためです(スレッドが互いのデータを破壊するため)。

したがって、ライブラリを変更して、代わりにすべてのデータをメモリに保持する必要があります。私はもともと図書館を書いたことがないので、コードに劇的な変更を加えることにあまり慣れていません。したがって、できるだけリファクタリングを少なくしてこれをやりたいと思います。ディスクに書き込むコードは非常に簡単です。これが(やや単純化された)例です。

final FileChannel fileChannel = this.randomAccessFile.getChannel();
fileChannel.position(calculatePosition());
while (blockData.hasRemaining())
{
 fileChannel.write(blockData);
}

ブロックの読み取り値は非常に似ています(つまり、FileChannelを使用します。これはランダムアクセスファイルから得られます)。

最も簡単な解決策は、ファイルの代わりにメモリ内の場所にマッピングするFileChannelの実装を使用できる場合だと感じています。 FileChannelのマップメソッドを使用して、ファイルをメモリ内の場所にマップできることを知っています。しかし、それは逆です。これにより、ファイルに「メモリAPI」が表示されます。いくつかのメモリに対してFileChannel-Interfaceが欲しいです。これの利用可能な実装はありますか?

役に立ちましたか?

解決

Java 7はプラグ可能なファイルシステムを許可するため、メモリベースのファイルシステムを使用して、現在のFileChannel APIを保持できます。それ以外は、エイドリアンが示唆するように、メモリのみの構造を提案するように、Commons-VFSに使用するAPIを変更する必要がある可能性があります。

他のヒント

たぶん、あなたはメモリ内ファイルシステムを使用することができます。 Apache Commons VFS.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top