【问题标题】:How properties file in java works?java中的属性文件如何工作?
【发布时间】:2015-04-18 18:57:53
【问题描述】:

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

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

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

【问题讨论】:

  • 您有什么问题吗?
  • @Puce 正如我在问题中所说的,我很“好奇”。实际上,我正在处理一些项目并使用属性文件,实际上我正在使用该程序的设备具有有限的计算和内存资源,这就是我想知道的原因。但是我也有一个替代解决方案,但我仍然想知道它,您能否参考一些详细解释的链接。谢谢。
  • 您可以查看源代码以查看实现。

标签: java properties-file


【解决方案1】:

Properties 类扩展了 Hashtable,因此它与带有 String 键的 Hashtable 一样高效,非常高效。

【讨论】:

  • @Prashant 是的,我知道这是其中之一。之前应该仔细检查过。修正了我的答案。
【解决方案2】:

使用java.util.Properties 操作属性文件的一个问题是会删除所有 cmets。

考虑改用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>

将保留,cmets,顺序,空白等。

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

【讨论】:

    【解决方案3】:

    你可以在代码中看到

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

    它扩展了HashTable 类,因此它的效率很高,您还可以检查Properties 类中的setPropertystoreload 方法的javadoc。

    【讨论】:

    • 好的,但是使用流从文件中读取它并将其放入 hastable 仍然存在开销。我说的对吗?
    • 你是对的!!在这种情况下,我们可以使用我们自己的方法。
    • “自己的方法”是什么意思?请解释一下?
    • IO 性能成本将超过插入 Map 的成本几个数量级。你真的不用担心。
    • @Bruce_Wayne 我的意思是ResourceBundle,但我同意@Donald
    【解决方案4】:

    这是source code;这很简单。该文件是read 在一个 O(n) 传递到一个 Hashtable 中,它有 O(1) 次插入和检索。Writing 返回文件的属性同样是 O(n)。上千把钥匙,甚至上万把钥匙都没有问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 2011-02-10
      相关资源
      最近更新 更多