Serialization
提供Julia对象的序列化。
Serialization.serialize
— Functionserialize(stream::IO, value)
以不透明格式将任意值写入流,以便可以通过 deserialize
读取回。读取回的值将尽可能与原始值相同,但请注意,Ptr
值被序列化为全零位模式(NULL
)。
首先将一个 8 字节的标识头写入流。为了避免写入头,请构造一个 Serializer
并将其作为 serialize
的第一个参数使用。另请参见 Serialization.writeheader
。
数据格式可能会在小的 (1.x) Julia 版本中发生变化,但由先前 1.x 版本写入的文件将保持可读。主要的例外是当外部包中类型的定义发生变化时。如果发生这种情况,可能需要在您的环境中指定受影响包的显式兼容版本。重命名包内的函数,即使是私有函数,也可能导致现有文件不同步。匿名函数需要特别小心:由于它们的名称是自动生成的,微小的代码更改可能会导致它们被重命名。应避免在用于长期存储的文件中序列化匿名函数。
在某些情况下,读取和写入机器的字长(32 位或 64 位)必须匹配。在更少见的情况下,操作系统或架构也必须匹配,例如在使用包含平台相关代码的包时。
serialize(filename::AbstractString, value)
打开一个文件并将给定的值序列化到其中。
此方法自 Julia 1.1 起可用。
Serialization.deserialize
— Function反序列化(stream)
读取由 serialize
写入的值。deserialize
假设从 stream
读取的二进制数据是正确的,并且已由兼容的 serialize
实现序列化。deserialize
旨在简化和提高性能,因此不验证读取的数据。格式错误的数据可能导致进程终止。调用者必须确保从 stream
读取的数据的完整性和正确性。
deserialize(filename::AbstractString)
打开一个文件并反序列化其内容。
此方法自 Julia 1.1 起可用。
Serialization.writeheader
— FunctionSerialization.writeheader(s::AbstractSerializer)
向指定的序列化器写入一个标识头。头由以下8个字节组成:
偏移量 | 描述 |
---|---|
0 | 标签字节 (0x37) |
1-2 | 签名字节 "JL" |
3 | 协议版本 |
4 | 位 0-1: 字节序: 0 = 小端, 1 = 大端 |
4 | 位 2-3: 平台: 0 = 32位, 1 = 64位 |
5-7 | 保留 |