纯文本由可打印字符组成,人可以直接阅读和理解其形式。例如,尽管下面的片段由可打印字符组成,它却是无意义的:
Fieldl9=abe
阅读者不知道abe的含义是什么。更好的选择是让其变得能让人理解:
DrawingType=UMLActivityDrawing
纯文本并非意味着文本是无结构的;XML、SGML和HTML都是有良好定义的结构的纯文本的好例子。通过纯文本,你可以做你通过某种二进制格式所能做的每件事情,其中包括版本管理。
与直接的二进制编码相比,纯文本所处的层面往往更高;前者通常直接源自实现。假定你想要存储叫做uses_menus的属性,其值既可为TRUE,也可为FALSE。使用纯文本,你可以将其写为:
myprop.uses_menus=FALSE
把它与对比一下。
大多数二进制格式的问题在于,理解数据所必需的语境与数据本身是分离的。你人为地使数据与其含义脱离开来。数据也可能加了密;没有应用逻辑对其进行解析,这些数据绝对没有意义。但是,通过纯文本,你可以获得自描述(self-describing)的、不依赖于创建它的应用的数据流。
提示20KeepKnowledgeinPlainText用纯文本保存知识缺点使用纯文本有两个主要缺点:
与压缩的二进制格式相比,存储纯文本所需空间更多
要解释及处理纯文本文件,计算上的代价可能更昂贵。
取决于你的应用,这两种情况或其中之一可能让人无法接受——例如,在存储卫星遥测数据时,或是用做关系数据库的内部格式时。
但即使是在这些情况下,用纯文本存储关于原始数据的元数据也可能是可以接受的(参见“元程序设计”,页)。
有些开发者可能会担心,用纯文本存储元数据,是在把这些数据暴露给系统的用户。这种担心放错了地方。与纯文本相比,二进制数据也许更晦涩难懂,但却并非更安全。如果你担心用户看到密码,就进行加密。如果你不想让他们改变配置参数,就在文件中包含所有参数值的安全哈希值作作为校验和。
文本的威力既然更大和更慢不是用户最想要的特性,为什么还要使用纯文本?好处是什么?
保证不过时
杠杆作用
更易于测试
保证不过时人能够阅读的数据形式,以及自描述的数据,将比所有其他的数据形式和创建它们的应用都活得更长久。只要数据还存在,你就有机会使用它——也许是在原来创建它的应用已经不存在很久之后。
只需部分地了解其格式,你就可以解析这样的文件;而对于大多数二进制文件,要成功地进行解析,你必须了解整个格式的所有细节。
考虑一个来自某遗留系统的数据文件。关于原来的应用你的了解很少;对你来说最要紧的是它保存了客户的社会保障号列表,你需要找出这些保障号,并将其提取出来。在数据文件中,你看到:
FIELD-45-/FIELD10
...
FIELD-89-/FIELD10
...
FIELD-23-/FIELD10
识别出了社会保障号的格式,你可以很快写一个小程序提取该数据——即使你没有关于文件中其他任何东西的信息。
但设想一下,如果该文件的格式是这样的:
AC2745B11P
...
XY435QTYL
...
6T21988AM
你可能就不会那么轻松地识别出这些数字的含义了。这是人能够阅读(humanreadable)与人能够理解(humanunderstandable)之间的区别。
在我们进行解析时,FIELD10的帮助也不大。改成
SSNO-45-/SSNO
就会让这个练习变得一点也不费脑子——而且这些数据保证会比创建它的任何项目都活得更长久。
保证不过时实际上,计算世界中的每一样工具,从源码管理系统到编译器环境,再到编辑器及独立的过滤器,都能够在纯文本上进行操作。
Unix哲学提供“锋利”的小工具、其中每一样都意在把一件事情做好——Unix因围绕这样的哲学进行设计而著称。这一哲学通过使用公共的底层格式得以实行:面向行的纯文本文件。用于系统管理(用户及密码、网络配置,等等)的数据库全都作为纯文本文件保存(有些系统,比如Solaris,为了优化性能,还维护有特定数据的二进制形式。纯文本版本保留用作通往二进制版本的接口)。当系统崩溃时,你可能需要通过最小限度的环境进行恢复(例如,你可能无法访问图形驱动程序)。像这样的情形,实在可以让你欣赏到纯文本的简单性。例如,假定你要对一个大型应用进行产品部署,该应用具有复杂的针对具体现场的配置文件(我们想到sendmail)。如果该文件是纯文本格式的,你可以把它置于源码控制系统的管理之下(参见源码控制,86页),这样你就可以自动保存所有改动的历史。像diff和fc这样的文件比较工具允许你查看做了哪些改动,而sum允许你生成校验和,用以监视文件是否受到了偶然的(或恶意的)修改。
更易于测试如果你用纯文本创建用于驱动系统测试的合成数据,那么增加、更新、或是修改测试数据就是一件简单的事情,而且无须为此创建任何特殊工具。与此类似,你可以非常轻松地分析回归测试(regressiontest)输出的纯文本,或通过Perl、Python及其他脚本工具进行更为全面彻底的检查。
最小公分母即使在未来,基于XML的智能代理已能自治地穿越混乱、危险的Internet、自行协商数据交换,无处不在的纯文本也仍然会存在。事实上,在异种环境中,纯文本的优点比其所有的缺点都重要。你需要确保所有各方能够使用公共标准进行通信。纯文本就是那个标准。
挑战使用你喜欢的语言,用直接的二进制表示设计一个小地址簿数据库(姓名、电话号码,等等)。完成以后再继续往下读。1.把该格式转换成使用XML的纯文本格式。2.在这两个版本中,增加一个新的、叫做方向的变长字段,在其中你可以输入每个人的住宅所在的方向。在版本管理与可扩展性方面会遇到什么问题?哪种形式更易于修改?转换已有的数据呢?治白癜风拉萨哪家医院好北京中医医院治疗白癜风用什么方法