java程序内存中的临时文件

时间:2011-02-16 17:29:36

标签: java performance memory large-files temporary-files

有没有办法强制在内存中的java程序中创建临时文件?既然我使用了几个大的xml文件,我会有这样的优势吗?我应该使用透明的方法,让我不要扰乱现有的应用程序。

更新:我正在查看源代码,我注意到它使用了库(我无法更改),这需要这些文件的路径......

由于

5 个答案:

答案 0 :(得分:3)

我能想到的唯一方法是创建一个RAM磁盘,然后将系统属性java.io.tmpdir指向该RAM磁盘。

答案 1 :(得分:2)

XML只是一个String,为什么不在内存中引用Strings,我认为File接口是一个分心。如果需要操作数据,请使用StringBuilder。如果您需要线程安全,请使用StringBuffer。如果您需要使用密钥查找可变数量的事物,请将它们放入类型安全Map中。

如果你必须保留File界面,那么创建一个InMemoryFileWriter包裹ByteArrayOutputStreamByteArrayInputStream以保留它们,但我想再考虑一下如果你只想在内存中缓存内容,那么内存中的File是一个错误的决定,当一个简单的String会这样做时会产生很多开销。

答案 2 :(得分:2)

如果您不需要,请不要使用文件。考虑来自Guava的com.google.common.io.FileBackedOutputStream

  

一个OutputStream,它开始缓冲到一个字节数组,但是一旦数据达到可配置的大小,就会切换到文件缓冲。

答案 3 :(得分:0)

你可能强制 java.io.File的默认行为有一些反射魔法,但我确定你不想那样做,因为它可能导致不可预测的行为。你最好提供一种机制,可以在通常和内存行为之间切换,并通过这种机制路由所有的呼叫。

查看this example,它显示了如何使用文件API创建内存中的文件。

答案 4 :(得分:0)

假设您可以控制用于写入文件的流 -

你绝对想要内存中的行为吗?如果您要做的只是减少要写入磁盘的系统调用次数,可以将FileOutputStream包装在BufferedOutputStream(具有适当大的缓冲区大小)并写入此BufferedOutputStream(或BufferedWriter)而不是直接写入原始的FileOutputStream (这确实需要对现有应用程序进行更改)