属性文件读写测试 PropertiesFileTest

  属性文件对于程序的拓展提供了很大的方便,但是什么该怎么去读写,怎么样读写才会最优呢?这里我做了一个简单的测试,

  一般而言主要的有三种配置文件,*.ini,*.properties,*.xml,如果有兴趣可以另外尝试一下json格式的数据作为配置文件的优化.这里我只是作为一个简单的测试,生成大量的键值对,然后展示存储,读取,以及设置所有的键值对所需要的时间.下面直接上代码:

import java.io.*;  
import java.util.*;  

import com.wk.mothod.MyTimeUtil;
  
public class PropertiesTest {  
    static int maxlong=100000;
    public static void main(String[] args) throws IOException {  
        // 同样先初始化Properties类  
        // 初始化之后在内存就出现一个保存key-value对的properties对象  
        MyTimeUtil mt=new MyTimeUtil();
        Properties properties = new Properties();  
        // 之后设置三个属性,可以与HashMap的put方法做类比,同样是在操作key-value对  
        // 故意设置一个中文的value来说明*.ini,*.properties与*.xml之间对中文的支持  
        mt.start();
        for(int i=0;i<maxlong;i++)
        {
            properties.setProperty("username"+i, "aaa"+"中文"+i);  
            
        }
        mt.endAndDisp("creat\t\t\t");
        ////////////////////////////////////store test ///////////////////
        mt.start();
        properties.store(new FileOutputStream("c:\\a.ini"), "中文");  
        mt.endAndDisp("store ini\t\t");
        mt.start();
        properties.store(new FileOutputStream("c:\\a.properties"), "中文");  
        mt.endAndDisp("store properties\t");
        mt.start();
        properties.storeToXML(new FileOutputStream("c:\\a.xml"), "中文");  
        mt.endAndDisp("store xml\t\t");
        //////////////////////////////////read test////////////////////////
        // 清空properties对象  
        
        mt.start();
        properties = new Properties();  
        // 再把c:\a.ini里面存放的属性读取进来  
        properties.load(new FileInputStream("c:\\a.ini")); 
        for(int i=0;i<maxlong;i++)
        {
            //System.out.println(properties.getProperty("username"+i)); 
            properties.getProperty("username"+i);
            
        }
        mt.endAndDisp("read ini\t\t");
        mt.start();
        properties = new Properties();  
        // 再把c:\a.ini里面存放的属性读取进来  
        properties.load(new FileInputStream("c:\\a.properties")); 
        for(int i=0;i<maxlong;i++)
        {
            //System.out.println(properties.getProperty("username"+i)); 
            properties.getProperty("username"+i);
            
        }
        mt.endAndDisp("read properties\t\t");
        mt.start();
        properties = new Properties();  
        properties.loadFromXML(new FileInputStream("c:\\a.xml"));  
        for(int i=0;i<maxlong;i++)
        {
//            System.out.println(properties.getProperty("username"+i));  
            properties.getProperty("username"+i);
            
        }
        mt.endAndDisp("read xml\t\t");
        ////////////////////////////////////////////set test////////////
        mt.start();
        properties = new Properties();  
        // 再把c:\a.ini里面存放的属性读取进来  
        properties.load(new FileInputStream("c:\\a.ini")); 
        for(int i=0;i<maxlong;i++)
        {
            //System.out.println(properties.getProperty("username"+i)); 
            properties.setProperty("username"+i, "aaa"+"中文"+(maxlong-i));  
            
        }
        mt.endAndDisp("set ini\t\t\t");
        mt.start();
        properties = new Properties();  
        // 再把c:\a.ini里面存放的属性读取进来  
        properties.load(new FileInputStream("c:\\a.properties")); 
        for(int i=0;i<maxlong;i++)
        {
            //System.out.println(properties.getProperty("username"+i)); 
            properties.setProperty("username"+i, "aaa"+"中文"+(maxlong-i));  
            
        }
        mt.endAndDisp("set properties\t\t");
        mt.start();
        properties = new Properties();  
        properties.loadFromXML(new FileInputStream("c:\\a.xml"));  
        for(int i=0;i<maxlong;i++)
        {
//            System.out.println(properties.getProperty("username"+i));  
            properties.setProperty("username"+i, "aaa"+"中文"+(maxlong-i));  
            
        }
        mt.endAndDisp("set xml\t\t\t");
    }  
}  

  类中使用的工具类可以在我的博客里面找到,就不多提,直接展示所得到的结果:

  从里面我们可以看到,生成10w属性对的时间是比较短的(数量太小时候时间太小了不好比较,所以设置的10w),对于存储时候,properties和ini的时间是差不多的,但是前者properties稍微快一点,xml的生成时间几乎是前者的两倍,对于读取时间来分析,properties和ini依旧比较接近,但是properties似乎略胜一筹,xml的时间是最长的了,最后从设置属性的时间来看,这次ini似乎第一,不过相差也并不是太大,xml还是在对最后面.

  对比一下文件的大小,结果如下如:

可以看到xml所占用的大小是比较大的.前面两个是差不多的.

  最后我们打开看看文件里面:

  从图中我们可以看到,xml所多的主要是每一个键值都有比ini和properties多的标志字段,因此大小稍微大一些,但是xml的一个优势是比较明显的,就是能够支持中文.

  最后做一个简单的小结下,ini和properties的效率是差不多的,xml是比较慢的,但是xml能够有中文是前面两者所不具备的.

  参考的文章:在此表示感谢.

【Java】配置文件概念,Java对配置文件的操作 - 编程记录,亲测有效 - CSDN博客 http://blog.csdn.net/yongh701/article/details/44123619

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

json解析-开发必会

json解析 什么是JSON: JSON即JavaScript Object Natation, 它是一种轻量级的数据交换格式, 与XML一样, 是广泛被采用的...

39460
来自专栏Young Dreamer

简易前端模板引擎

模板解析 解决的问题: 将data和js+html片段解析成html片段,完成赋值和js逻辑,如下所示: 输入: var data = {     name: ...

228100
来自专栏程序员互动联盟

【专业技术】介绍Java中的内存泄漏

Java语言的一个关键的优势就是它的内存管理机制。你只管创建对象,Java的垃圾回收器帮你分配以及回收内存。然而,实际的情况并没有那么简单,因为内存泄漏在Jav...

33480
来自专栏Python

浅淡python中with的用法,上下文管理器

例子一 首先来看一段代码: class Foo(object): def __init__(self): print('实例化一个对象...

227100
来自专栏java一日一条

JVM 进行线程同步背后的原理

所有的 Java 程序都会被翻译为包含字节码的 class 文件,字节码是 JVM 的机器语言。这篇文章将阐述 JVM 是如何处理线程同步以及相关的字节码。

10610
来自专栏Python小屋

Python正则表达式案例一则:单词非两端字符改为小写

问题描述:给定一段英文,要求把其中所有单词除两端字符之外的其他字母都改为小写。 技术要点: 1)re模块的sub()函数用法; 2)match对象的group(...

29860
来自专栏spring源码深度学习

java基础thread——java5之后的多线程(浅尝辄止)

虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个...

9710
来自专栏Linyb极客之路

深入理解和探究Java类加载机制

java.lang.ClassLoader类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个Java 类,即 ...

11930
来自专栏xingoo, 一个梦想做发明家的程序员

数字按照不同格式转换成字符串

  如果自己写函数,不使用itoa怎么判断呢?   我们用通常的办法,对数字进行每位的除商,得到后与字符'0'相加。 flag = 0; ...

213100
来自专栏LIN_ZONE

PHP 反射的简单使用

20040

扫码关注云+社区

领取腾讯云代金券