如何序列化不实现Serializable的对象?我无法将其标记为Serializable,因为该类来自第三方库。
答案 0 :(得分:26)
你不能序列化一个没有实现Serializable
的类,但你可以将它包装在一个类中。为此,您应该在包装类上实现readObject
和writeObject
,以便可以自定义方式对其对象进行序列化。
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的内置机制之外,还有很多其他的序列化方法。