序列化

提供 Julia 对象的序列化。

Serialization.serialize函数
serialize(stream::IO, value)

将任意值以不透明格式写入流中,以便可以通过 deserialize 读取回。读取回的值将尽可能与原始值相同,但请注意,Ptr 值被序列化为全零位模式(NULL)。

首先将 8 字节的识别标头写入流。要避免写入标头,请构造一个 Serializer 并将其用作 serialize 的第一个参数。另请参见 Serialization.writeheader

数据格式可能会在 Julia 的次要(1.x)版本中更改,但先前 1.x 版本编写的文件将保持可读性。对此的主要例外情况是外部包中类型的定义发生更改时。如果发生这种情况,可能需要在您的环境中指定受影响包的显式兼容版本。即使是私有函数,重命名包内的函数也会使现有文件不同步。匿名函数需要特别注意:由于它们的名称是自动生成的,因此代码的细微更改会导致它们被重命名。应避免将匿名函数序列化到用于长期存储的文件中。

在某些情况下,读取和写入机器的字大小(32 位或 64 位)必须匹配。在更罕见的情况下,操作系统或架构也必须匹配,例如在使用包含平台相关代码的包时。

serialize(filename::AbstractString, value)

打开一个文件并将给定值序列化到其中。

Julia 1.1

此方法自 Julia 1.1 起可用。

Serialization.deserialize函数
deserialize(stream)

读取由 serialize 编写的值。deserialize 假设从 stream 读取的二进制数据是正确的,并且已由 serialize 的兼容实现序列化。deserialize 旨在实现简单性和性能,因此不验证读取的数据。格式错误的数据可能导致进程终止。调用方必须确保从 stream 读取的数据的完整性和正确性。

deserialize(filename::AbstractString)

打开一个文件并反序列化其内容。

Julia 1.1

此方法自 Julia 1.1 起可用。

Serialization.writeheader函数
Serialization.writeheader(s::AbstractSerializer)

将识别标头写入指定的序列化器。标头由 8 个字节组成,如下所示

偏移量描述
0标签字节 (0x37)
1-2签名字节“JL”
3协议版本
4位 0-1:字节序:0 = 小端,1 = 大端
4位 2-3:平台:0 = 32 位,1 = 64 位
5-7保留