美文网首页
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不被持久化的原因

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

  • Java transient不被持久化的原因

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

  • Java transient关键字小记

    transient义为短暂的。在Java中,transient和对象的序列化(持久化)息息相关。 在Java中,要...

  • Java基础总结(一)

    transient transient会阻止实例中用此关键字声明的变量持久化,当对象被反序列化时,这样的实例变量值...

  • 2017-12-26

    transient使用小结: 1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序...

  • Java将对象序列化 Transient

    一、transient使用小结 1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在...

  • Java(二)Java基础--04熟悉Java中各种关键词

    一、transient 1、序列化和非序列化 序列化和非序列化 2、transient transient 二、i...

  • Hibernate 面试题

    hibernate的三种状态之间如何转换 当对象由瞬时状态(Transient)一save()时,就变成了持久化状...

  • HIbernate实体状态

    1、瞬时/临时状态(transient)对象不存在于数据库及session缓存当中 2、持久化状态(persist...

  • 框架之Hibernate的三种状态

    三种状态 Transient(临时状态):new出来的对象;它没有持久化,不存在于Session中——此状态中的对...

网友评论

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

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