我正在对正在使用的库进行一些更改。为了减少内存使用率,库将其临时数据写入磁盘,而不是将其保存在内存中。但是,对于我的使用情况,将其保持在记忆中更有效。它还存在一些并发问题,因为它具有恒温文件的恒定名称,因此不能同时在不同的线程中运行(因为线程会损坏彼此的数据)。

因此,我需要更改库,以便将其所有数据保存在内存中。我最初没有写过图书馆,因此我对代码做出重大更改也不很舒服。因此,我想尽可能少地进行重构。写入磁盘的代码非常简单。这是一个(有些简化的)示例:

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

块的读数非常相似(即它使用了Filechannel,它是从RandomAccessfile获得的)。

感觉最简单的解决方案是,如果我可以使用Filechannel的某些实现,将其映射到内存中的位置而不是将其映射到文件中。我知道我可以使用Filechannel的Map-Method将文件映射到内存中的位置。但是,这是相反的方式。这给了我一个文件的“内存”。我想要一些内存的Filechannel接口。有什么可用的实现吗?

有帮助吗?

解决方案

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top