数据格式--语言专属数据格式

语言自带数据格式

许多语言都自带了语言层级的数据格式:比如说Java的Serializable,Ruby的Marshal,Python的Pickle等等。这些语言层级的编码方式使用十分方便,可以和语言中的对象直接互相转换。但是这种方式也有一些问题:

  • 编码结果和语言相关,在其它语言中很难完成解码工作,往往要求数据交互各方只能使用同一语言;
  • 解码的结果往往是一个对象,如果编码方植入恶意代码的话会带来极大安全隐患;
  • 数据版本控制需要在语言层级控制;
  • 编码解码操作对CPU的消耗,编码后数据的大小往往表现效率不佳;

JSON与XML

业界现有的标准数据格式中,JSON和XML无疑是最流行的。JSON,XML和CSV都是文本格式,具有很好的可读性。它们的缺点在于:

  • 在XML和CSV中,无法区分一个数字和全部由数字组成的字符串。JSON对数字和字符串做了区分,却没有区分整形和浮点型。这意味着在处理大数时(比如说大于2^53)将会无法处理或者损失精度;
  • 对于某些JSON,XML不支持的语言内数据类型,需要实现专门的代码来处理编码/解码的问题;

在传输少量数据时,数据编码之后的体积大小不是什么关键因素。当数据量增大之后,数据编码的时间效率和空间占用就成为了需要关注的点。JSON在空间表现上要优于XML,但是仍然有很大的优化空间,这引申出了许多基于XML的优化数据格式(比如:WBXML, Fast Infoset等等)和基于JSON的优化数据格式(MessagePack, BSON, BJSON, UBJSON, BISON等等)。
JSON和XML对于空间的额外占用主要在于键的存储,它们需要存储完整的键本身的值。

你可能感兴趣的:(数据格式--语言专属数据格式)