纯文本的威力
来源:互联网 发布:.top新网域名有哪些 编辑:程序博客网 时间:2024/05/15 17:32
程序员进行的是面向知识的工作——收集需求,将之变成知识。程序(源文件或脚本)、配置和各种文档,都是这些知识的表达。实践证明,持久地存储知识的最佳格式是纯文本(Plain Text),通常不是二进制文件。
纯文本的优点
1. 保证不过时
对于二进制文件,数据的含义被封装在了解析文件的程序中,也就是人为地使数据与其含义分离开来;如果没有指定的程序来解析,数据文件将没有任何意义。对于纯文本文件,则很容易创建自描述的数据流;这种人可以阅读的(human readable)信息格式,可以比任何创建它们的应用程序都活得更久。
乍听起来似乎有点不可思议(尤其是对于经常随意用邮件发出去一个明天就不再有用的Office文档附件的人们来说),但事实确实如此。你很可能需要去解析一个来自上世纪80、90年代的遗留系统的数据文件,如果它们是用DSV或SGML的文本形式存储,你容易从中发掘数据的含义;想象一下如果它们是Wordstar或CCED的文件格式。
同样可以想象,当MS Office 2003下市以后,doc/xls/ppt都将是向后兼容的遗留文件格式。如果你的信息保存在这些文件中,你只能祈求未来的Office版本不要放弃对这些文件格式的兼容。
2. 扩展性好
二进制格式经常设定了数据值的位数,要扩展位数将非常困难。比如为地址分配32位的IPv4如今面临的问题。相反,如果在文本格式中需要更大的值,直接写就行;也许应用程序暂时无法解析这些更大的值,但与修改所有相关数据文件相比,修改应用程序要容易得多。
对于定长的二进制文件,扩展数据项也是同样的问题。
3. 可以使用各种工具
从文本编辑器到源码管理程序再到各种文本过滤器(命令行管道),各种工具都可以在纯文本上操作。这样就不必依赖特定的解析程序,你可以用任意的方式去操作文件。
写一个Perl或Python脚本去处理纯文本文件也要比处理格式未知的二进制文件更容易实现。比如,根据程序的元数据自动生成文档,如果是纯文本的文档将会很容易,如果想要生成doc格式的Word文档那就要费点力气了。
纯文本的缺点
1. 与紧凑的二进制格式相比,存储纯文本所需的空间往往更多
2. 解释和处理纯文本,性能上的代价可能更大
在有些应用中,以上两种情况使得二进制格式成为更好的选择——多媒体数据文件(图片、音频、视频)是1的例子,数据库文件是2的例子。
扩展阅读
The Pragmatic Programmer(中译本:程序员修炼之道)一书的第14节及其相关内容分析了纯文本的优势。
The Art of Unix Programming(中译本:Unix编程艺术)一书的第五章分析了几种常见的文本格式,并给出了一组设计文本格式的约定。
常见实例比较(BIN表示二进制,TXT表示纯文本)
操作系统和应用程序的配置
BIN: Windows注册表
TXT: Unix配置文件目录/etc
前者限定了你用指定的方式(注册表编辑器和系统API)访问存储的配置数据;后者则是一组纯文本文件,你可以用任何一种你喜欢的文本编辑器来修改配置,用文本比较器来查看配置的改动,配置文件还支持注释以方便对配置选项的理解。
一种可能的情境是,当系统出现问题导致图形界面无法加载,你只能以命令行方式登录系统时,倘若想要查看或修改系统配置,你一定会欣赏到纯文本的简单性。
Office套件:文档、表格与展示等
BIN: Microsoft Office
TXT: OpenOffice.org、GNOME Office、TeX/LaTeX、DocBook
现在主流的Office套件,都使用压缩的XML作为文件存储格式(包括通行标准ODF和MS Office 2007采用的OOXML),这是透明性和存储空间的一个折衷。至于ODF和OOXML之间的标准之争暂且不谈,目前这两种开放的标准相对于MS Office 2003之前采用的封闭二进制格式至少是一个进步。
TeX/LaTeX是一个著名的排版语言,对数学公式的排版尤为擅长。当年Knuth在写The Art of Computer Programming一书第二卷时发现出版社排出的书稿不能让他满意,于是设计了TeX出来;如今这已经成为出版业的一种排版标准。LaTeX则是在TeX基础上扩展了一组宏包,以方便使用。TeX/LaTeX文档是一种带标记的纯文本文件,可以转换成漂亮的PostScript或PDF格式。它的缺点是标记太接近表现层,将文档转换为HTML格式比较困难。
DocBook是如今非常流行的一个文档方案,是一种纯结构性的标记语言,更好地做到了结构与表现的分离。文档可以方便地转换到HTML、PDF、RTF、CHM等常见的文档格式。
- 纯文本的威力
- 纯文本组成的MM
- 纯文本连接的重要
- 如何启动Fedora14的纯文本模式
- 纯文本链接的优化技巧
- 创建纯文本、HTML格式的邮件
- 读取CKEditor的值(包括纯文本)
- LVS负载均衡的搭建纯文本
- 读取CKEditor的值(包括纯文本)
- js获取html里的纯文本
- Ajax获取响应的纯文本
- 纯文本用textbox,带格式的文本用richtextbox
- 分区的威力(翻译)
- EnumChildWindows的威力
- 二锅头的威力
- EnumChildWindows的威力
- bat的威力
- 李开复:算法的威力
- Oracle如何执行批量sql语句
- SystemParametersInfo 在VS 2008里异常
- 微软Dynamics系列认证-MCBMSP
- Android学习笔记(四)——is missing required source folder gen解决办法
- 八字节的长整型表示
- 纯文本的威力
- goto用法
- mysql存储引擎:InnoDB和MyISAM的差别/优劣评价/评测/性能测试
- Android模拟器调试与真机调试
- 合成基因的方式
- oracle常见语句
- 模拟向特定窗口或控件发送键盘消息(F1)
- C# 中的多线程
- C#连接Firebird