如何在Java中序列化非序列化?

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

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

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

我希望这是有道理的。 🙂

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

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

如果您的类已经实现了Serializable接口(序列化所需),那么您所要做的就是声明您不希望使用transient序列化的字段:

  public transient String description; 

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

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