心如止水: 如何序列化一个non serializable的类?
如何序列化一个non serializable的类?
进行Spark开发时,经常会遇到这种问题?如何序列化一个没有实现Serializable接口的类呢?
以下将进行简单说明:Non Serializable记为A。
主要步骤:
0.使用一个外部类Outer将A作为一个成员变量,标记为@transient,且Outer能够通过getter或者其他方式访问A的状态;或者Outer继承A;
1.Outer实现Serializable接口,并且重写readObject和writeObject方法,实现定制化的序列化;
2.Outer在writeObject方法中,将A的状态进行序列化,并且readObject方法中,将A的状态读取出来,对A进行构造。
3.具体实现时,在writeObject方法中,首先调用defaultWriteObject方法,保存所有的non-transient成员,然后保存A的可序列化的状态;在readObject方法中,首先调用defaultReadObject方法,获取所有的non-transient成员,然后读取A的状态。
以下将进行简单说明:Non Serializable记为A。
主要步骤:
0.使用一个外部类Outer将A作为一个成员变量,标记为@transient,且Outer能够通过getter或者其他方式访问A的状态;或者Outer继承A;
1.Outer实现Serializable接口,并且重写readObject和writeObject方法,实现定制化的序列化;
2.Outer在writeObject方法中,将A的状态进行序列化,并且readObject方法中,将A的状态读取出来,对A进行构造。
3.具体实现时,在writeObject方法中,首先调用defaultWriteObject方法,保存所有的non-transient成员,然后保存A的可序列化的状态;在readObject方法中,首先调用defaultReadObject方法,获取所有的non-transient成员,然后读取A的状态。
Read full article from 心如止水: 如何序列化一个non serializable的类?
No comments:
Post a Comment