将erlang值保存到文件并将其加载回的过程是什么?
例如,我有一个列表,我想保存为一个包含许多其他erlang类型的文件。然后我想把它加载回一个进程,我会用什么<代码>io库:格式(“~P”,术语])与将erlang值保存到文件并将其加载回的过程是什么?,erlang,Erlang,例如,我有一个列表,我想保存为一个包含许多其他erlang类型的文件。然后我想把它加载回一个进程,我会用什么io库:格式(“~P”,术语])与io:write,然后文件:查阅?是。请注意,每个术语都需要一个尾随点,并且file:consult返回文件中所有以点结尾的术语的列表。因此,如果您只有一个术语,代码如下所示: ok = file:write_file("myfile", io_lib:format("~p.~n", [Term])), {ok, [Term]} = file:consul
io:write
,然后文件:查阅
?是。请注意,每个术语都需要一个尾随点,并且
file:consult
返回文件中所有以点结尾的术语的列表。因此,如果您只有一个术语,代码如下所示:
ok = file:write_file("myfile", io_lib:format("~p.~n", [Term])),
{ok, [Term]} = file:consult("myfile").
作为Legocia解决方案的替代方案,您还可以将
erlang:term_to_binary/1
的结果写入文件,并使用erlang:binary_to_term/1
将其读回。不过,这种方法有几个警告:
erlang:term_to_binary/1
会生成空字符和换行符,这会造成解析问题。不过,有几种方法可以解决这个问题:
- base64对术语进行编码,并用换行符分隔
- 将您的术语存储在另一个术语中。例如,如果要存储三个术语,请使用
erlang:term_to_binary({T1,T2,T3})
文件:请查阅术语到二进制
的等效文件,因此必须显式读取(作为二进制),然后运行二进制到术语
术语到二进制
比人类可读的术语更快)此外,您可以使用
erlang:term_to_binary/2
并将[compressed]作为gzip压缩的第二个参数。不过,这并不是简单地包含在文件模块中,这有点令人恼火!