将erlang值保存到文件并加载它们的过程是什么?

时间:2014-05-23 15:18:25

标签: erlang

例如,我有一个列表,我想保存为具有许多其他erlang类型的文件。然后我想将它加载回一个过程我会用什么? io_lib:format("~P", [Term]) io:write然后file:consult

2 个答案:

答案 0 :(得分:3)

作为legoscia解决方案的替代方案,您还可以将erlang:term_to_binary/1的结果写入文件,并使用erlang:binary_to_term/1将其读回。但是,这种方法有一些注意事项:

  1. 该文件不会是人类可读的(至少不容易阅读)
  2. 您无法轻松存储多个术语,因为erlang:term_to_binary/1可以生成空字符和换行符,这可能会导致解析问题。但是,有几种方法可以解决这个问题:
    • base64对术语进行编码并按换行符分隔
    • 将您的条款存储在另一个字词中。例如,如果您要存储三个术语,请使用erlang:term_to_binary({T1, T2, T3})
  3. file:consult没有等效的term_to_binary,因此您必须明确阅读(作为二进制文件),然后运行binary_to_term
  4. 那你为什么要打扰erlang:term_to_binary/1呢?有两个原因:

    1. 空间效率(在大多数情况下)
    2. 解析速度(解析term_to_binary比人类可读的术语更快)

答案 1 :(得分:2)

是。请注意,每个术语都需要一个尾随点,file:consult会返回文件中所有以点终止的术语的列表。因此,如果您只有一个术语,代码将如下所示:

ok = file:write_file("myfile", io_lib:format("~p.~n", [Term])),
{ok, [Term]} = file:consult("myfile").