ArrayList(1)--transient关键字

transient

transient是短暂的意思。

对于transient 修饰的成员变量,在类的实例对象的序列化处理过程中会被忽略。 因此,transient变量不会贯穿对象的序列化和反序列化,生命周期仅存于调用者的内存中而不会写到磁盘里进行持久化。

序列化
序列化使用ObjectOutputStream.writeObject(e)方法。
image

反序列化使用ObjectInputStram.readObject()方法
image
static修饰的变量同样不会序列化!


ArrayList中的transient:

image

为什么ArrayList还能序列化呢?
很简单,重写writeObject()和readObject()方法就好了

  • 又有一个问题,既然想序列化,ArrayList为什么又要使用transient呢?

因为他想要屏蔽接口的序列化方法,自己来实现自定义的序列化方法
因为容量的问题,elementData里面有一些元素是空的,这种是没有必要序列化的。所以使用transient屏蔽数组,使用默认方法将其他属性序列化之后,在单独处理elementData[]
我们来看看ArralList源码重写的的writeObject(),可以看到,它先把除了transient element[]之外的属性序列化,然后单独处理element[size](非空元素)。
image

posted @ 2021-08-25 18:34  快乐的海盗  阅读(228)  评论(0编辑  收藏  举报