java 中的属性文件如何工作?
How properties file in java works?
我在 java 中多次使用属性文件来存储静态值并从程序中删除硬编码代码。但我只用它来表示数百个值。但是我很好奇属性文件实际上是如何工作的?
他们如何操作和存储文件中给定的值?
它们的效率如何?即,如果我们在属性文件中使用数千个值,它是否与具有小值的属性文件一样有效? 如果需要的处理量线性增加或处理开销很高?
Properties class 扩展了 Hashtable,所以它和带字符串键的 Hashtable 一样高效,非常高效。
代码中可以看到
public class Properties extends Hashtable<Object,Object>
{
// ... code
}
它扩展了 HashTable
class 所以它很高效,你也可以检查 javadoc 中的 setProperty
, store
和 load
方法 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
实现,带有额外的方法来读取其内容并将其写入文件。
我在 java 中多次使用属性文件来存储静态值并从程序中删除硬编码代码。但我只用它来表示数百个值。但是我很好奇属性文件实际上是如何工作的?
他们如何操作和存储文件中给定的值?
它们的效率如何?即,如果我们在属性文件中使用数千个值,它是否与具有小值的属性文件一样有效? 如果需要的处理量线性增加或处理开销很高?
Properties class 扩展了 Hashtable,所以它和带字符串键的 Hashtable 一样高效,非常高效。
代码中可以看到
public class Properties extends Hashtable<Object,Object>
{
// ... code
}
它扩展了 HashTable
class 所以它很高效,你也可以检查 javadoc 中的 setProperty
, store
和 load
方法 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
实现,带有额外的方法来读取其内容并将其写入文件。