gpt4 book ai didi

java - Java 的 FileChannel 的内存版本

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:30 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

关于java - Java 的 FileChannel 的内存版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1915069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com