image.png序列化有2种方式:
1、只是实现了Serializable接口
序列化时,调用java.io.ObjectOutputStream的defaultWriteObject方法,将对象序列化。(此时transient修饰的字段,不会被序列化)
2、实现了Serializable接口,同时提供了writeObject方法
序列化时,会调用该类的writeObject方法。而不是java.io.ObjectOutputStream的defaultWriteObject方法。(此时transient修饰的字段,是否会被序列化,取决于writeObject)
在LinkedList中 为成员变量都添加了transient修饰,但是真的就不被序列化了吗?看下图
image.png
在序列化之后,经过反序列化list中的值还是存在的。
原因:
这是因为LinkedList内部重写了writeObject()方法,所以序列化的时候走的自己的方法而不是ObjectOutputStream的writeObject()方法。
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException {
// Write out any hidden serialization magic
s.defaultWriteObject();
// Write out size
s.writeInt(size);
// Write out all elements in the proper order.
for (Node<E> x = first; x != null; x = x.next)
s.writeObject(x.item);
}
网友评论