在Java Serialization中,如果一个类有多个对象(组合),那么将以什么顺序检索状态?

时间:2013-12-21 12:52:42

标签: java serialization

如果类定义为

public class A implements java.io.Serializable
{
    Example a;
    Test b;
    Another c;
}

在检索状态时,将检索哪个顺序? 一个对象? 一个? B' C吗?

3 个答案:

答案 0 :(得分:2)

如果你序列化A,它将被写为:

  • A
  • 的开头
  • a
  • b
  • c
  • A
  • 结束

反序列化按照序列化编写的顺序读取流。但是,序列化流只是一个八位字节序列,可能有不同顺序的abc(这些字段最多只能分配一次)。

此外,对象可以具有彼此的其他引用。例如,即使Test无法在运行时引用Anotherb的反序列化也可能包含反序列化为c的对象。

答案 1 :(得分:0)

  1. 与此处的其他答案相反,未指定顺序,除了基类在派生类之前。

  2. 没关系,因为字段名也被传递,所以流是明确的。

  3. 它可以由班级本身改变。

  4. 与此处的答案相反,为流中的每个对象执行最近的非可序列化超类的默认构造函数。在这种情况下,至少有四个。

  5. 请参阅Object Serialization Specification

答案 2 :(得分:-1)

字节顺序非常重要,通常与编写java的顺序相同。

  1. a将被加载。
  2. b将被加载。
  3. c将被加载。
  4. 如果没有抛出异常,请放置a,b,c
  5. 如果存在则执行方法readObject。
  6. 注意:不会执行任何构造函数! 注意:Obfuscatores可能会更改字段名称。