有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java程序内存中临时文件的性能

有没有办法将java程序中创建的临时文件强制存储在内存中?因为我使用了几个大的xml文件,所以在这方面我会有优势吗?我应该使用一个透明的方法,使我不打乱现有的应用程序

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

谢谢


共 (5) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    XML只是一个String,为什么不在内存中引用Strings,我认为文件接口是一种干扰。如果需要操作数据,请使用StringBuilder。如果需要线程安全,请使用StringBuffer。如果你有很多东西需要用钥匙查,就把它们放在类型安全的Map

    如果你一定要保留File接口,那么创建一个InMemoryFileWriter来包装ByteArrayOutputStreamByteArrayInputStream以将它们保存在内存中,但是我再次认为,如果你只想在内存中缓存东西,那么整个File内存中的事情是一个糟糕的决定,这是一个简单的String所需要的大量开销

  3. # 3 楼答案

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

  4. # 4 楼答案

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

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

  5. # 5 楼答案

    如果没有必要,不要使用文件。从番石榴中考虑^ {CD1>}:

    An OutputStream that starts buffering to a byte array, but switches to file buffering once the data reaches a configurable size.