对象的保存和加载过程
保存和加载对象
save filename object load filename object
保存哪些信息?
将对象保存在 MAT 文件中会保存:
对象类的全名,包括任何命名空间限定符
动态属性的值
当类的第一个对象保存到 MAT 文件时该类定义的所有属性默认值。
所有属性的名称和值,但存在以下例外:
如果属性的当前值与类定义中指定的默认值相同,则不会保存属性。
如果属性的
Transient
、Constant
或Dependent
特性设置为true
,则不会保存属性。
有关属性特性的描述,请参阅属性特性。
要保存图形对象,请参阅 savefig
。
如何加载属性数据?
从 MAT 文件加载对象时,load
函数会还原对象。
load
创建一个新对象。如果类
ConstructOnLoad
属性设置为true
,则load
调用不带参量的类构造函数。否则,load
不会调用类构造函数。load
将保存的属性值赋给对象属性。这些所赋的值受制于由类定义的任何属性验证。然后调用由类定义的属性 set 方法(Dependent
、Constant
或Transient
属性除外,这些属性不会保存或加载)。load
将保存在 MAT 文件中的默认值赋给其值未保存的属性,因为这些属性在保存时设置为默认值。这些赋值导致对类定义的属性 set 方法的调用。如果正在加载的对象的属性包含对象,
load
将创建一个相同类的新对象并将其赋给该属性。如果属性中包含的对象为句柄对象,则该属性会包含一个相同类的新句柄对象。
MATLAB® 调用属性 set 方法,以确保在类定义发生变化的情况下属性值仍然有效。
有关信息,请参阅属性 get 和 set 方法和验证属性值。
加载过程中的错误
如果类的新版本删除、重命名或更改了属性的验证,load
在尝试设置已更改或删除的属性时可能生成错误。
如果在从文件加载对象时出现错误,MATLAB 会执行以下操作之一:
在传递给 loadobj
方法的 struct
中,字段名称对应于属性名称。字段值是对应属性的保存值。
如果保存的对象派生自多个具有同名私有属性的超类,则 struct
仅包含最直接超类的属性值。
有关如何实现 saveobj
和 loadobj
方法的信息,请参阅When to Customize the Serialization Process。
对属性验证的更改
如果类定义更改了属性验证,使得加载的属性值不再有效,则 MATLAB 会用当前定义的默认值代替该属性。该类可以定义 loadobj
方法或转换器方法,以提供类版本之间的兼容性。
有关属性验证的信息,请参阅验证属性值。