java - 是否可以在 Java 中创建内存中的文件对象?

标签 java

我目前正在进行的优化项目之一广泛使用了 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 {
    ...
}

这是我们目前正在做的事情:

  1. 创建两个 File 对象,hydFilequalFile
  2. hydFile 上调用 HydraulicSim.simulate
  3. hydFilequalFile 上调用 QualitySim.simulate
  4. 删除文件。

问题是我们必须很多次这样做。对于一个大的问题,我们可以这样做几十万甚至几百万次。您可以想象反复创建/写入/删除这些文件会导致速度变慢。

所以我的问题是:我是否可以创建这些文件,使它们只驻留在内存中,从不接触磁盘?每个文件都非常小(我说的是几百字节),所以把它们扔进内存不会有问题;我只需要弄清楚如何。我四处搜索并没有找到太多,除了 MappedByteBuffer。 ,但我不确定如何从该类创建一个 File,或者是否有可能。

欢迎任何建议!

最佳答案

最直接的解决方案是挂载虚拟磁盘并在此处存储文件。然后你不需要触摸你的代码,文件访问将会快如闪电:-)

Linux

# mkfs -q /dev/ram1 8192
# mkdir -p /ramcache
# mount /dev/ram1 /ramcache

MacOS

  1. http://osxdaily.com/2007/03/23/create-a-ram-disk-in-mac-os-x/

window

  1. http://support.microsoft.com/kb/257405
  2. http://www.softperfect.com/products/ramdisk/

关于java - 是否可以在 Java 中创建内存中的文件对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22307484/

相关文章:

Java 为什么 char = char^char 与 char^= char 不同?

java - Eclipse 在尝试显示 rt.jar 中的类的 Javadoc 时超时

java - 我应该为我的新 Spring Batch 作业使用 Spring Data flow 服务器吗?

java - 从 URL 检索 XML,不写入前几行

java - 使用 JPanel 将 ChartPanel 添加到 JTabbedPane

java - 在 Spring Mvc 中配置注解

c# - 工厂模式很多参数需要提示

java - 用反斜杠替换全部

java - jsp中查找文件上传路径

java - -bash : ./jdk-6u31-linux-i586.bin:无法执行二进制文件