我正在对我正在使用的一个库进行一些更改。为了减少内存使用,该库将其临时数据写入磁盘,而不是将其保存在内存中。然而,对于我的使用场景,将其保存在内存中会更有效率。它还存在一些并发问题,因为它的临时文件具有常量名称,因此不能在不同的线程中并发运行(因为这些线程会破坏彼此的数据)。
因此,我需要更改库,使其将所有数据保存在内存中。我最初并没有编写这个库,因此我不太喜欢对代码进行剧烈的更改。因此,我希望通过尽可能少的重构来做到这一点。写入磁盘的代码非常简单。下面是一个(稍微简化的)示例:
final FileChannel fileChannel = this.randomAccessFile.getChannel();
fileChannel.position(calculatePosition());
while (blockData.hasRemaining())
{
fileChannel.write(blockData);
}块的读取非常相似(即它使用从RandomAccessFile获得的FileChannel )。
我觉得最简单的解决方案是如果我可以使用FileChannel的一些实现,它映射到内存中的一个位置,而不是文件。我知道我可以使用FileChannel的map-method将文件映射到内存中的某个位置。然而,这是另一种方式。这给了我一个文件的“内存API”。我想要一个FileChannel-interface和一些内存。有什么可用的实现吗?
发布于 2009-12-17 00:43:38
Java7将允许可插拔的文件系统,因此您将能够使用基于内存的文件系统,并保留当前的FileChannel应用编程接口。除此之外,您很可能必须将您使用的API更改为Commons-VFS,就像禤浩焯建议的那样,或者使用仅内存结构。
发布于 2009-12-16 22:54:18
也许您可以使用内存中的文件系统,比如Apache Commons VFS。
https://stackoverflow.com/questions/1915069
复制相似问题