zoukankan      html  css  js  c++  java
  • 属性文件读写测试 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			");
            ////////////////////////////////////store test ///////////////////
            mt.start();
            properties.store(new FileOutputStream("c:\a.ini"), "中文");  
            mt.endAndDisp("store ini		");
            mt.start();
            properties.store(new FileOutputStream("c:\a.properties"), "中文");  
            mt.endAndDisp("store properties	");
            mt.start();
            properties.storeToXML(new FileOutputStream("c:\a.xml"), "中文");  
            mt.endAndDisp("store xml		");
            //////////////////////////////////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		");
            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		");
            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		");
            ////////////////////////////////////////////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			");
            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		");
            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			");
        }  
    }  

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

      

      从里面我们可以看到,生成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

  • 相关阅读:
    【备忘录】Sublime Text编辑器如何在选中的多行行首增加字符串
    微信卡券领取页面提示签名错误,微信卡券JSAPI签名校验工具对比签名一模一样,cardExt扩展字段有问题
    程序运行时动态生成缓存时存在的问题
    golang的beego框架开发时出现的问题纪录
    【备忘录】CentOS服务器mysql忘记root密码恢复
    试玩swoole扩展 第一天
    spring 定时任务执行2次
    JVM CUP占用率过高排除方法,windows环境
    spring cloud 服务A调用服务B自定义token消失,记录
    java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Timestamp
  • 原文地址:https://www.cnblogs.com/wangkun1993/p/7307424.html
Copyright © 2011-2022 走看看