2009-12-16 35 views
3

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

因此,我需要更改库,以便它将所有数据保存在内存中。我最初并没有编写这个库,因此我对编写代码做出了很大的改变并不是很舒服。因此,我希望尽可能少地进行重构。写入磁盘的代码非常简单。这里的一个(稍微简化的)例子:

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

块的读数是非常相似的(即,它使用一个FileChannel,它从一个RandomAccessFile的所得到的)。

感觉最简单的解决方案是如果我可以使用FileChannel的一些实现,FileChannel映射到内存中的某个位置而不是文件。我知道我可以使用FileChannel的map-method将文件映射到内存中的某个位置。但是,这是另一回事。这给了我一个“内存API”文件。我想要一个针对某些内存的FileChannel接口。有没有可用的实现?

回答

2

Java 7将允许可插入的文件系统,因此您可以使用基于内存的文件系统并保留当前的FileChannel API。除此之外,您可能不得不像Adrian所建议的那样将您使用的API更改为Commons-VFS,或者只使用内存结构。