3

我正在对我正在使用的库进行一些更改。为了减少内存使用,库将其临时数据写入磁盘而不是将其保存在内存中。但是,对于我的使用场景,将其保存在内存中会更有效。它也有一些并发问题,因为它的临时文件具有常量名称,因此不能在不同的线程中同时运行(因为线程会破坏彼此的数据)。

因此,我需要更改库,以便将所有数据保存在内存中。我最初并没有编写这个库,因此我对对代码进行大刀阔斧的改变不是很舒服。因此,我希望通过尽可能少的重构来做到这一点。写入磁盘的代码非常简单。这是一个(有些简化的)示例:

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

块的读取非常相似(即它使用从 RandomAccessFile 获得的 FileChannel)。

感觉最简单的解决方案是如果我可以使用 FileChannel 的一些实现,它映射到内存中的一个位置而不是文件。我知道我可以使用 FileChannel 的映射方法将文件映射到内存中的某个位置。然而,情况恰恰相反。这给了我一个文件的“内存API”。我想要一个针对一些内存的 FileChannel 接口。有没有可用的实现?

4

2 回答 2

2

Java 7 将允许可插入文件系统,因此您将能够使用基于内存的文件系统并保留当前的 ​​FileChannel API。除此之外,您可能必须按照 Adrian 的建议将您使用的 API 更改为 Commons-VFS 或使用仅内存结构。

于 2009-12-16T16:43:38.497 回答
1

也许您可以使用内存中的文件系统,例如Apache Commons VFS

于 2009-12-16T14:54:17.860 回答