我目前正在进行的优化项目之一广泛使用了 EPANet .我们反复调用 EPANet 中的两种模拟方法来了解水如何流经配水管网。
HydraulicSim是我们使用的类之一。查看重载的 simulate
方法:
public void simulate(File hyd) throws ENException {
...
}
public void simulate(OutputStream out) throws ENException, IOException {
...
}
public void simulate(DataOutput out) throws ENException, IOException {
...
}
我们使用的另一个类是 QualitySim .在这里,我们还使用重载的 simulate
方法:
public void simulate(File hydFile, File qualFile) throws IOException, ENException {
...
}
void simulate(File hydFile, OutputStream out) throws IOException, ENException {
...
}
这是我们目前正在做的事情:
- 创建两个
File
对象,hydFile
和qualFile
。 - 在
hydFile
上调用HydraulicSim.simulate
。 - 在
hydFile
和qualFile
上调用QualitySim.simulate
。 - 删除文件。
问题是我们必须很多次这样做。对于一个大的问题,我们可以这样做几十万甚至几百万次。您可以想象反复创建/写入/删除这些文件会导致速度变慢。
所以我的问题是:我是否可以创建这些文件,使它们只驻留在内存中,从不接触磁盘?每个文件都非常小(我说的是几百字节),所以把它们扔进内存不会有问题;我只需要弄清楚如何。我四处搜索并没有找到太多,除了 MappedByteBuffer。 ,但我不确定如何从该类创建一个 File
,或者是否有可能。
欢迎任何建议!
最佳答案
最直接的解决方案是挂载虚拟磁盘并在此处存储文件。然后你不需要触摸你的代码,文件访问将会快如闪电:-)
Linux
# mkfs -q /dev/ram1 8192
# mkdir -p /ramcache
# mount /dev/ram1 /ramcache
MacOS
window
关于java - 是否可以在 Java 中创建内存中的文件对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22307484/