美文网首页
transient不被持久化的原因

transient不被持久化的原因

作者: 我才是贾福鹏 | 来源:发表于2018-09-02 19:07 被阅读0次

    网上大多都是对transient使用的介绍,没有介绍为什么被transient修饰的类成员变量不被序列化,下面将通过源码进行讲解

    • 环境: jdk1.8
    • 核心代码: ObjectStreamClass.java
    private static ObjectStreamField[] getDefaultSerialFields(Class<?> cl) {
            Field[] clFields = cl.getDeclaredFields();
            ArrayList<ObjectStreamField> list = new ArrayList<>();
            int mask = Modifier.STATIC | Modifier.TRANSIENT;
    
            for (int i = 0; i < clFields.length; i++) {
                if ((clFields[i].getModifiers() & mask) == 0) {//重点,忽略掉 static 和 transient 修饰的变量
                   list.add(new ObjectStreamField(clFields[i], false, true));
                }
            }
            int size = list.size();
            return (size == 0) ? NO_FIELDS :
                list.toArray(new ObjectStreamField[size]);
        }
    

    重点在 if ((clFields[i].getModifiers() & mask) == 0) ,判断变量类型,将 static 和 transient 修饰的成员变量忽略,在io类writeObject中,遍历成员变量的时候就不会出现相应变量。

    相关文章

      网友评论

          本文标题:transient不被持久化的原因

          本文链接:https://www.haomeiwen.com/subject/zzgmwftx.html