当我们反序列化一个对象时,很难理解它是如何在某种状态下重新获取对象的?它是否包含对象的任何元数据?
答案 0 :(得分:4)
当一个对象被序列化时,该对象的类将与该对象的非瞬态字段的内容一起写入该流。解串器将尝试加载该类(并且有几种机制可以执行此操作),然后填充非瞬态字段。
协议规范如下:http://java.sun.com/javase/6/docs/platform/serialization/spec/protocol.html
如果通过“元数据”指的是类上的注释,那么不,它们不是用对象本身序列化的,而是在类上可用。如果您的意思是其他,请描述您的意思。
答案 1 :(得分:0)
在较高级别,序列化流包含对象内的数据和所涉及的类的名称,以及确保类未更改的版本号。它使用该信息创建对象的新实例,并使用与旧实例相同的数据填充它。它这样做可以避免对象创建的所有常见约束(例如,需要调用构造函数)。
人们有一个令人困惑的地方,就是他们可以认为类定义本身是序列化的。它不是,只是它包含的数据有足够的信息来知道在deserilalized时要重新创建哪些对象。当对象被反序列化时,它必须匹配类路径上的现有类,序列化二进制数据不包含该类。