稍具规模的软件都会须要一个配置文件来支持软件的执行。眼下常见的配置文件格式有纯文本。XML。SQLite。自己定义二进制格式,怎样进行选择呢?

1 纯文本——永远不会失效的文件格式

文本化是传统Unix哲学的教条之中的一个,可见其巨大威力。大多数类Unix系统的软件配置文件都是採用了纯文本格式。

比如/etc/inittab, /etc/fstab, httpd.conf等等。

1.1 长处

(1)可读性强

配置文件不仅须要让机器理解,也须要让人理解。

纯文本就很easy让人理解。

(2)存在大量纯文本编辑工具

能够使用不论什么编辑器改动。

可别小看这个长处,它的影响是巨大的。存在大量很好用的针对纯文本的搜索,编辑工具(如grep,sed,awk),想想正則表達式,就知道为啥纯文本这么重要了。

(3)可永久保存

过去的几十年中。各种文件格式层出不穷。但细致想想。十几年前留下来的文件,今天还能查看并使用的确实不多了,纯文本格式就是当中之中的一个。

不管到了什么年代。总能很easy的找到一个文本编辑器来查看改动纯文本文件。

(4)跨平台

字符编码跨越不论什么计算机平台。什么32位系统,64位系统。什么Linux,Windows,Mac,iOS, Android,对待纯文本的方式是一致的。

1.2 缺点

(1)解析繁琐,无现成库可用

不同的配置文件往往自己定义了详细的实现格式。这就须要定制化的解析代码。稍具复杂度的配置文件往往导致解析代码繁琐。

(2)明文不安全

有些程序的配置文件也是知识产权的一部分,须要对外隐蔽。

纯文本不具有这个功能。

2 XML——互联网时代的宠儿

借助Internet之风。XML大型其道。很多大型软件開始採用xml格式的配置文件,如Tomcat。

2.1 长处

(1)纯文本的全部长处

XML本身也是纯文本,仅仅是在纯文本的基础上。定义了统一的文档结构布局。

所以,纯文本的长处,XML也都有。不再叙述。

(2)尤其适合树形层次数据存储

很多模型数据都是树状的。XML本身就是针对树状数据而设计的。

(3)统一的布局,现成解析库可用

眼下差点儿全部语言都有支持XML解析的库可用。这样就省去了解析代码,不easy出现错误。

2.2 缺点

(1)元数据反复。浪费空间

与纯文本相比,XML配置文件往往更大,看看tomcat下的大量配置文件就知道了。

(2)可读性、可编辑性不如纯文本

XML便于机器识别与分析。可是并不太适合人来阅读。尤其是结构复杂的XML文档。

(3)须要主要的DOM基础,才干使用

并非全部的程序猿都具有DOM基础,所以有一定的入门门槛

3 SQLite——最好用的单文件数据库

著名的CentOS包管理系统yum的库管理数据使用SQLite。

3.1 长处

(1)仅仅有一个文件。包括一切

这个优势是很明显的。SQLite仅仅须要一个文件就包括了全部配置数据,很利于备份和恢复。

(2)支持SQL查询语言

这是SQLite最大的优势了,程序猿无需关心详细的I/O,仅仅要使用sql就能够操作数据了。

(3)数据量能够很大

即时配置文件大小到了GB的级别,SQLite仍然能够良好的执行,并且占用内存不大。

(4)开放源代码

SQLite源代码採用了最宽松的授权–无需授权。

能够在项目中直接使用其源文件。

(5)SQLite库很稳定

SQLite经历了十多年的发展。已经很稳定。

(6)能够随时加入更改配置项。而无须更改使用代码

这也是SQL语言带来的巨大优势

(7)跨平台

跨越不同架构。不同操作系统。

3.2 缺点

(1)不能使用文本编辑器查看

尽管眼下SQLite软件很普及,但毕竟还是专用软件,不如文本编辑器那样人人都会用。并且多年以后。谁也不能保证SQLite还会继续良好的发展。

(2)须要使用者掌握SQL语言

并非全部的程序猿都熟悉SQL。

(3)因为是在硬盘上操作数据,所以小文件时。速度不如XML。

对于配置文件来说,这个不算什么问题,毕竟大部分配置文件仅仅是在程序启动时使用。

4 自己定义二进制文件——被淘汰的垃圾

自己定义二进制文件格式的配置文件在如今已经很不提倡了。仅仅有在极其特殊的场合和一些无知的程序猿还在使用。

比如。systemd另一部分配置文件是这样的二进制格式,但迫于各方压力,慢慢也在向纯文本方式进化。

配置文件格式用哪个?文件夹+纯文本文件,XML,SQLite的更多相关文章

  1. Tomcat配置域名和虚拟文件夹

    说明: 我在本机中添加域名模拟,假设是主机直接配置也能够使用.我用的tomcat是apache-tomcat-7.0.42 本地添加域名 本文介绍怎样通过改动tomcat的配置.实现通过IP地址或者域 ...

  2. 在Win7中IIS配置Asp.Net虚拟文件夹的方法及错误总结!

    在Win7中IIS配置Asp.Net虚拟文件夹的方法总结! 一.右键[站点].点击[加入虚拟文件夹]或[虚拟应用程序],笔者建议最好建立虚拟应用程序,由于这就跟一个站点差点儿相同.不用考虑路径问题. ...

  3. 怎么统计指定文件夹下含有.xml格式的文件数目

    如何统计指定文件夹下含有.xml格式的文件数目?如题 ------解决思路----------------------Directory.GetFiles(@"路径", " ...

  4. Python实现对文件夹内文本文件递归查找

    平台:Win7 64 bit,IDLE Python 3.4.0 经常有这样的需求:在一个文本文件里查找特定字符串,这很好实现,用任何文本查看工具几乎都可以做到.而有的时候,想查找一个文件夹下的所有文 ...

  5. 第九篇-新建文件夹和文本文件mkdirs,createNewFile

    一.新建一个empty activity的项目 二.修改AndroidMainfest.xml,添加用户权限. <?xml version="1.0" encoding=&q ...

  6. VBScript Sample:遍历文件夹并获取XML文件中指定内容

    案例: 我有一个文件夹,里面有很多子文件夹,每个子文件夹中都存在一个相同名字的XML文件,XML文件里面的标签结构相同,只是内容不同,XML文件中包含ID,Name等标签. 文件夹及文件结构如下图: ...

  7. layout文件夹中activity_main.xml与fragment_main.xml文件的处理记录

    androidSDK更新到22.6后新建立项目时在layout文件夹下面出现了activity_main.xml与fragment_main.xml,这是为了在平板开发中使用碎片,但是让不需要碎片的人 ...

  8. IDEA将Maven项目中指定文件夹下的xml等文件编译进classes

    eclipse下面创建的Maven项目,使用mybatis.eclipse里面能正常启动,在idea中一直卡在maybatis 加载位置. 1.首先是不报错也没反应.这个时候需要我们重写SqlSess ...

  9. Java web 项目读取src或者tomcat下class文件夹下的xml文件或者properties文件

    //生成一个文件对象: File file = new File(getClass().getClassLoader().getResource("test.xml").getPa ...

随机推荐

  1. [转]如何在 JS 代码中消灭 for 循环

    一,用好 filter,map,和其它 ES6 新增的高阶遍历函数 二,理解和熟练使用 reduce 三,用递归代替循环(可以break!) 四,使用高阶函数遍历数组时可能遇到的陷阱 五,死磕到底,T ...

  2. mongodb 32系统安装失败问题

    32位系统 在安装完成后 运行mongod --dbpath c:\data\db后,没有如愿以偿出现端口数字27017,出现了如下的报错 ************** D:\GREENT~1\Pow ...

  3. [转载]mac软件

    效率之王:Afred小帽子:通过前人的配置,替代掉了 有道词典.发音工具.开关机.快速搜索.地图.Spotlight等应用. 主力编辑器:Atom因为高颜值.强大的插件和预览功能 取代了之前的subl ...

  4. HDU1251 统计难题 trie树 简单

    http://acm.hdu.edu.cn/showproblem.php?pid=1251 题意: 找前缀数量 裸模板 #include<cstdio> #include<cstr ...

  5. HDU3585 Information Disturbing 树形dp+二分

    http://acm.split.hdu.edu.cn/showproblem.php?pid=3586   题意 : 给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用 ...

  6. 【欧拉函数】BZOJ4173-数学

    [题目大意] [思路] 基本是popoqqq大爷的题解,稍微添加了几句自己的注释,方便理解 同理,如果n%k+m%k<k等价于0 =∑([(n+m)/k]-[n/k]-[m/k])×φ(k) … ...

  7. bzoj 1780

    这是一道环上的问题,我们先将一个环展开,再复制一次. 这样,任何一个合法方案一定对应在转换后的序列的一些连续的区间,使得它们的并的长度大于等于圈长. 然后,我们将区间合并一下(就是将一些被其他区间包含 ...

  8. VK Cup 2016 - Qualification Round 1 (Russian-Speaking Only, for VK Cup teams) B. Chat Order 水题

    B. Chat Order 题目连接: http://www.codeforces.com/contest/637/problem/B Description Polycarp is a big lo ...

  9. CentOS 6.9/7通过yum安装指定版本的PostgreSQL

    PostgreSQL(10+) 一.安装PostgreSQL // 安装EPEL源 # wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel- ...

  10. CentOS 6.9搭建的网关服务器不经过静态路由表的问题解决(没有开启路由转发功能)

    场景: 1.使用CentOS 6.9搭建的网关服务器,下面的机器都设置用这个网关,搭建参考:http://www.cnblogs.com/EasonJim/p/8289618.html 2.配置了静态 ...