是否可以在Java中创建内存中的File对象?

Geo*_*off 8 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 {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我们使用的另一个类是QualitySim.在这里,我们还使用重载simulate方法:

public void simulate(File hydFile, File qualFile) throws IOException, ENException {
    ...
}

void simulate(File hydFile, OutputStream out) throws IOException, ENException {
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

  1. 创建两个File对象,hydFilequalFile.
  2. 呼叫HydraulicSim.simulatehydFile.
  3. 呼叫QualitySim.simulatehydFilequalFile.
  4. 删除文件.

问题是我们必须做很多次.对于一个大问题,我们可以做到数十万甚至数百万次.您可以想象减速反复创建/写入/删除这些文件的原因.

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

欢迎任何建议!

Leo*_*rak 6

最直接的解决方案是在这里安装ramdisk和store文件.然后你不需要触摸你的代码和文件访问将闪电般快:-)

Linux的

# mkfs -q /dev/ram1 8192
# mkdir -p /ramcache
# mount /dev/ram1 /ramcache
Run Code Online (Sandbox Code Playgroud)

苹果系统

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

视窗

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


Mik*_*e B 2

向 EPANet 团队提交问题可能是值得的。模拟方法都简单地使用 File 对象来获取输入和输出流。如果他们提供了一种QualitySim.simulate将流作为参数的方法(他们对输出流而不是输入流执行此操作),那么您可以绕过 FS。或者直接分叉然后自己做。