外部数据格式之浅显易懂

与外部世界和其他Erlang节点进行通信,同时保存东西在磁盘上,Erlang都使用特殊编码格式 – 外部数据格式。

这种格式的主要要求如下:

  • 易于人类和机器看懂编码的数据和理解这些数据是什么。一个外部数据总是第一个字节值为131 (0x83)。
  • 压缩的数据有压缩的标志项。数据的头部第一个字节为:131 (0x83),第二个字节为:80
    (0x50),第三到第六个字节为:无符号32位大端的整数表示未压缩的数据长度,这几个元素组成一个标签表示这是一个压缩数据。
  • 为了适用于跨平台,所有整数被编码为大端序(从最高有效位到最低有效位字节),所有浮点数用大端的IEEE编码,所有文本用UTF-8
    或 ISO-8859-1(ASCII超集) 来编码。

编码一个数据用erlang:term_to_binary,相反的操作,即解码用erlang:binary_to_term。解码包含有意设定的二进制数据也使得本来不可能构建出来的数据成为可能,比如端口号,进程标识。(注:感谢少帮主的翻译)

通常原子被编码为字符串。在基于网络的分布式模式下,为进一步减少协议的大小,一个分布式头部可以被添加进来。它包含了在已经编码的消息中的原子名称的表。然后在消息中的原子被替换为此表中的索引。

那些从来没出现在Erlang程序中的虚拟机内部值的类型是不可能被编码的,比如THE_NON_VALUE、寄存器的引用、CP等。

请参阅
外部数据格式文档

 

原文链接: http://beam-wisdoms.clau.se/en/latest/eli5-etf.html