java 中的属性文件如何工作?

How properties file in java works?

我在 java 中多次使用属性文件来存储静态值并从程序中删除硬编码代码。但我只用它来表示数百个值。但是我很好奇属性文件实际上是如何工作的?

他们如何操作和存储文件中给定的值?

它们的效率如何?即,如果我们在属性文件中使用数千个值,它是否与具有小值的属性文件一样有效? 如果需要的处理量线性增加或处理开销很高?

Properties class 扩展了 Hashtable,所以它和带字符串键的 Hashtable 一样高效,非常高效。

代码中可以看到

public class Properties extends Hashtable<Object,Object>
 {
       // ... code
    }

它扩展了 HashTable class 所以它很高效,你也可以检查 javadoc 中的 setPropertystoreload 方法 Properties class.

使用 java.util.Properties 操作属性文件的一个问题是会删除任何注释。

考虑改用 org.apache.felix.utils.properties.Properties(它建立在 java.util.AbstractMap<K,V> 之上,来自

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.utils</artifactId>
        <version>1.6.0</version>
    </depenency>

其中会保留,评论,顺序,白色space等

插入的性能成本是 O(log(n)) 与条目数。

这里的source code; it's very straightforward. The file is read in one O(n) pass into a Hashtable, which has O(1) insertions and retrievals.Writing返回文件的属性同样是O(n)。几千个key,甚至几万个key都没有问题。

听起来您在设想 Properties class 每次修改文件或每次访问 属性 时都会重新读取文件。这不是 Properties 的工作方式,这样做会非常浪费。 Properties 本质上是一个美化的 Map 实现,带有额外的方法来读取其内容并将其写入文件。