浅谈序列化及文本格式

序列化及文本格式

需求背景

软件项目在开发过程中,将大量初始化配置项在一定程度上保存在配置文件中。肯定有很多人有疑问,为什么不将这些信息放在软件内存中。开机时与用户交互进行确认?这肯定是一个好想法,但是如果配置太多或者太复杂就不是一个好主意了。我所在的行业,配置需要专门的人员进行管理,并花费大量时间调试配置。这里仅仅是讨论一下配置的两种方式,序列化和文本格式的配置文件的优劣,其他的配置文件方式暂时不过多叙述。

配置文件之序列化文本

在业界中,序列化文本常用两种,json和xml文件。当有内存数据需要保存时,只需要调用程序提供的序列化接口直接一步到位将其序列化成流数据保存在文件中。软件需要读取这些数据时,只需要将其反序列化并可以获取一个指定结构的对象。这种方法非常方便快捷。(序列化还有一个用到的地方就是传输,发送编码时需要将对象序列化成字节流,接收解码时将字节流反序列化成对象)

配置文件之普通文本

另外一种常用的配置就是文本,比如常用的ini或者txt文件。保存方法就是Open一个文本对象(设定模式),然后将内存对象调用C++库函数将文本一行一行的Write进文本对象中(切记不是使用With包裹对象时,使用完之后,需要close对象,否则长时间会造成句柄溢出),读取时重复上述操作,这个过程通常也是按照一行一行的读取。

两者比较

首先说下普通文本。对于本人来说,第一次接触的是这种方式来和配置交互。这种对于初学者是很友好的,但是后来学习了序列化和反序列化之后,发现这种方式太繁琐。比如,自己定义的一个对象有几十个属性,使用普通文本方法时,需要一行一行手动写,再一行一行的读取,代码冗余不堪。使用序列化这个问题基本不存在,一行代码就能搞定。但是代价也是有的,一旦文本和内存中定义的对象不一致时,常常就会报错。json还好些,满足规定格式就能过去,xml的这种,文本中有某种属性,但是内存定义的类中没有这种对象时,程序能立马死给你看。在项目升级过程中,这种很是常见。比如该软件在n年前配合xml部署了一次,现在要对这个项目进行升级。软件已经迭代了n多次,类肯定频繁的修改。假如配置只有这一个类,很方便的查找不同并修改。现实时配置文件十来个,每个的类有十来个。有点没有改变,有的变化了结构,有点变化了内容含义。有任何一项配置没有按照新版软件来进行适应修改,那么软件就会升级失败。现实中,修改配置的时间一般很短,就会导致各种升级失败,也就是常说的版本不兼容。txt倒是不存在这个问题,之前的存在就读取,不存在就做默认值。软件启动不会因此抛异常。
总体来说,文本文件对人员更加直观,错了很容易手动修改(也很容易改错),也有很强的兼容性。半结构化的数据对内存对象更加友好,序列化和反序列化时很方便,但是兼容性并不如普通文本。还有一种常用的配置文件比如bin,这种完全是人类不可阅读的,其目的就是杜绝人手动修改,比较有意思的是有些配置文件以数据库文件的方法来设置,这种就是完全方便人手动修改,这种方法可以对配置文件设置密码,可以避免无关人员修改。

你可能感兴趣的:(笔记,经验分享)