读书笔记《Unix编程艺术》二

文本化

文本化包含两种设计,一种是将应用数据存储在永久存储器(磁盘等)中文件格式,另一种是在协作进程之间传递数据和命令的应用协议。

存储数据结构的文件格式

  1. 通常在C++,python等中,将内存中数据结构的存储为文件的过程称为序列化(列集),将文件中的数据结构恢复到应用程序中的过程称为反序列化(散集)

  2. 数据文件格式与配置文件(运行控制文件)的文件格式之间存在差异,这是因为配置文件通常都是只读文件,而数据文件通常可读可写,另一个方面是因为配置文件通常都是手工编辑,体积很小,而数据文件通常是程序生成,体积多大都有可能。

  3. 在数据文件格式设计中最重要的几个指标: 透明性(用户可读),互用性(跨平台),可扩展性,经济型(传输文件大小),建议在经济型不那么重要的情况下尽可能使用文本形式取代二进制形式。

  4. 数据文件元格式(几种数据文件格式)

    1) DSV风格(Delimiter-Separated Values)

    • 适用场景:当数据为列表,名称为关键字,记录信息通常很短时。如Linux 中/ect/passwd

      games: *:12:100:games:/usr/games:

    • 表现形式:记录间使用冒号分割,使用\支持在数据域中包含冒号或者特殊字符

    2) RFC822格式

    • 适用场景:具有不同字段集合而且字段中数据层次没有递归或树形结构的记录

      Return-Path: it315_test@sina.com
      Delivered-To: it315_test@mx72.mail.sohu.com
      Received: from smtp.sina.com.cn (unknown [202.108.3.177])
      by sohumx139.sohu.com (Postfix) with SMTP id E4F9802C1249
      for it315_test@sohu.com; Thu, 10 Nov 2005 16:39:50 +0800 (CST)
      Received: (qmail 49221 invoked from network); 10 Nov 2005 08:39: 33 -0000
      Received: from unknown (HELO it315?test) (218.246.5.151)
      by smtp.sina.com.cn with SMTP; 10 Nov 2005 08:39:33 -0000

    • 表现形式:每行存放一个记录,以类似邮件头字段名的标记命名

    3)Cookie-Jar格式

    • 适用场景:记录只是一堆非结构化文本的情况

      “Among the many misdeeds of British rule in India, history will look
      upon the Act depriving”…
      %
      The people of the Various provinces are strictly forbidden to have
      in their possession any swords…”
      %
      This is an example

    • 表现形式:使用跟随%%的换行符作为记录分隔

    4)XML

    • 适用场景: 复杂数据结构,能表达递归嵌套
    • 表现形式:一对尖括号(<>)定义的标签(HTML类似)

    5)Windows INI格式

    • 适用场景:“名称-属性对” 场景下使用,指出项目与可选属性

    [DEFAULT]
    account = esr

    [python]
    directory = /home/esr/cvs/python/
    developer = 1

Unix文本文件格式的约定

  • 以换行结束每一行,确保每行只有一个记录
  • 每行尽量不要超过80字符(终端普遍尺寸)
  • 使用 # 引入注释
  • 反斜杠约定,\ 用于特殊字符
  • 每一行的记录用连续空白或冒号分割
  • 不要过分区分tab与连续空格(这个真心重要)
  • 优选十六进制而不是八进制
  • 若一个记录有多行,用 %%\n 作为记录分隔
  • 注意浮点数取整问题

应用协议设计中三个问题

  1. 应用协议应容易分析
  2. 端对端设计中要考虑安全与认真问题
  3. 为获得良好的性能而设计应用协议
展开阅读全文

没有更多推荐了,返回首页