如何在Java中序列化不可序列化?

时间:2011-05-28 19:19:33

标签: java serialization

如何序列化不实现Serializable的对象?我无法将其标记为Serializable,因为该类来自第三方库。

5 个答案:

答案 0 :(得分:26)

你不能序列化一个没有实现Serializable的类,但你可以将它包装在一个类中。为此,您应该在包装类上实现readObjectwriteObject,以便可以自定义方式对其对象进行序列化。

  • 首先,制作不可序列的字段transient
  • writeObject中,首先在流上调用defaultWriteObject以存储所有非瞬态字段,然后调用其他方法来序列化不可序列化对象的各个属性。
  • readObject中,首先在流上调用defaultReadObject以回读所有非瞬态字段,然后调用其他方法(对应于您添加到writeObject的方法)进行反序列化你的不可串行的对象。

我希望这是有道理的。 : - )

答案 1 :(得分:5)

将非序列化类包装在您自己的实现Serializable的类中。在您的班级的writeObject方法中,执行必要的操作以序列化非序列化对象上的足够信息,以便您的班级readObject方法可以重建它。

或者,联系非序列化类的开发人员并告诉他修复它。 : - )

答案 2 :(得分:2)

如果你的类已经实现了Serializable接口(序列化所需),你所要做的就是声明你不想用瞬态序列化的字段:

    public transient String description;

答案 3 :(得分:1)

你可以使用Kryo。它适用于非序列化类,但需要先注册类。

答案 4 :(得分:-2)

如果该类不是final,那么您可以创建自己的类来扩展它并实现Serializable。除了Java的内置机制之外,还有很多其他的序列化方法。