【原创】Erlang 中 binary_to_term 和 term_to_binary 的使用场景

在《Erlang程序设计》第五章中有如下说明:

@spec term_to_binary(Term) -> Bin 
      该函数可以将任何 Erlang 项式转化为相应的二进制数据。而转换得到的二进制数据是以所谓的“外部数据格式”存储的。这种数据可以用于文件存储、网络传输等。而且在转换之后,还可以从这些二进制数据中还原出原始的数据项。该函数在需要对复杂的数据结构进行文件存储和网络传输时极为有用。 

在《erts-x.x.x》的 Reference Manual -> erlang 中有如下说明: 

?


1

2

3

4

5

6

7

term_to_binary(Term) -> ext_binary()

Types:

    Term = term()

Returns a binary data object which is the result of encoding Term according to the Erlang external term format.

根据 Erlang 外部项式格式对 Term 进行编码,返回相应的二进制数据对象

This can be used for a variety of purposes, for example writing a term to a file in an efficient way, or sending

an Erlang term to some type of communications channel not supported by distributed Erlang.

在《初探Erlang的term_to_binary数据封包机制》中关于外部项式的详细解释: 

erlang:term_to_binary/1,2 函数返回值是 Erlang 扩展 term 格式 (Erlang external term format) 的 binary,即 ext_binary() 。 这个函数能把 Erlang 数据封装成二进制流,是一种存储和传输 Erlang 数据的有效途径,甚至可以用这种封包/解包方式用作 Socket 的通信协议(某页游项目就是这么干的)。

时间: 2024-11-02 15:48:55

【原创】Erlang 中 binary_to_term 和 term_to_binary 的使用场景的相关文章

Erlang中的socket编程简单例子_Erlang

Erlang 中gen_tcp 用于编写TCP程序,gen_udp用于编写UDP程序.一个简单的TCP服务器echo示例: 复制代码 代码如下: Start_echo_server()->          {ok,Listen}= gen_tcp:listen(1234,[binary,{packet,4},{reuseaddr,true},{active,true}]),          {ok,socket}=get_tcp:accept(Listen),          gen_tc

Erlang中的模块与模式匹配介绍_Erlang

模块是Erlang的基本代码单元,erl文件编译后以.beam作为扩展名,采用UTF8字符集,.erl文件示意如下: -module(模块名,与存放模块的文件名相同) -export([方法名/输入参数的个数]) 复制代码 代码如下: Method1( {a,b,c})->a*b*c; Mehtod2({d,e})->d-e. 模块属性有两种类型:预定义型和用户定义型.   Erlang中用于代表函数的数据类型被称为fun,相当于python中的lambda,一般用于 1)      对列表里

Erlang中的映射组Map详细介绍_Erlang

主要是遇到 Map匹配的问题,所以顺便回忆一下 Erlang 中的映射组 Map,在其它语言中被称作 Hash 哈希或者 Dict 字典. Erlang 从 R17 版本开始支持映射组 创建映射组 Erlang 中的映射组用结构 #{} 表示,创建一个映射组可以这样 复制代码 代码如下: % 不管你怎么排序,最终结果都是按键的字典顺序排列的 #{ name => "wittyfox", age => 19 }. % => #{age => 20,name =&g

Erlang中的注册进程使用实例_Erlang

之前看到 Erlang 中的注册进程时,对注册并不理解,主要是不理解注册的原子的作用域.刚才突然想明白了: 复制代码 代码如下: 注册进程关联的原子具有全局作用域 也就是说关联了注册进程之后的原子可以全局被使用 Erlang 中的并发机制是通过消息邮箱实现的,进程间进行通讯的方式只有消息邮箱,而进程间通讯需要知道进程的进程号,而使用 spawn 产生新进程时会返回新进程的进程号供使用. 一个最简单的进程间通信的程序如下 复制代码 代码如下: -module(test). start() ->  

Erlang中的并发程序简介_Erlang

Erlang中基本的并发函数 1)  Pid =spwan(Mod,Func,Args) 创建一个新的进程来执行apply(Mod,Func,Args),与调用进程并列运行,会使用最新的代码定义模块. 2)  Pid!Message 向Pid进程异步发送Message,!为发送操作符 3)  Receive - end 接收消息 复制代码 代码如下:  receive            Pattern1[when Guard1]-> Expression1;            Patte

Erlang中的匹配模式总结_Erlang

一.赋值时匹配 原子匹配 复制代码 代码如下: atom    = atom                        % atom another = another                     % another atom    = another                     % exception error 变量匹配 复制代码 代码如下: Var = 2.                              % 2 Var = 3 - 1.       

Erlang中的基本元素操作小结_Erlang

Erlang shell中,用句号加空格.tab或回车来结束表达式,%表示注释的起点,;隔离子句.模块是.erl 文件,库的头文件.hrl, shell中的编译时c(),外编译命令时erlc, 退出shell用q(),或erlang:halt(). 变量以大写字母开头,且不能重新绑定变量,只能一次性赋值,具有不可变状态.原子是全局的,不需要宏定义或包含文件,以小写字母开头,还可放在单引号内,是极简表达式.   元组(tuple)是一些数量固定的项目归组成单一实体{,}, 由于是匿名的,通常在第一

Erlang中的函数与流程控制介绍_Erlang

一:函数 1:在Erlang中,[名字相同但参数数目不同]的两个函数是完全不同的函数. 2:其他模块内的函数用完全限定名称 被调用: 复制代码 代码如下: -module(sort1). -export([reverse_sort/1, sort/1]). reverse_sort(L) ->         lists1:reverse(sort(L)). sort(L) ->         lists:sort(L). 3:子句间以分号[;]分隔,在最后的结尾处以[.]结尾. 4:每个函

Photoshop制作森林中唯美的晨光照射场景图

  Photoshop制作森林中唯美的晨光照射场景图            开始之前先来一张GIF动图,感受下设计思路: 接下来开始正儿八经的教程部分 分类: PS图片处理