美文网首页程序员
Java transient不被持久化的原因

Java transient不被持久化的原因

作者: 夹胡碰 | 来源:发表于2020-04-24 11:01 被阅读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中,遍历成员变量的时候就不会出现相应变量。

相关文章

  • Java transient不被持久化的原因

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

  • transient不被持久化的原因

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

  • Java transient关键字小记

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

  • Java transient关键字使用示例

    Java transient关键字用于类属性/变量,表示该类的序列化过程在为该类的任何实例创建持久字节流时应该忽略...

  • Java基础总结(一)

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

  • java的关键字transient

    Java中transient关键字的作用,简单地说,就是让某些被修饰的成员属性变量不被序列化,这一看好像很好理解,...

  • JAVA-transient 关键字

    为什么要有transient关键字 在Java中,transient修饰的变量不会被序列化,即这些变量并不是序列化...

  • 2017-12-26

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

  • Java将对象序列化 Transient

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

  • Java 序列化

    参考链接:Java对象的序列化和反序列化Java transient关键字使用小记 1. Java序列化概念 把对...

网友评论

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

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