如何从Java反序列化概念中声明为瞬态的文件中检索成员



在Java反序列化中,transient关键字用于限制来自用户的数据。如果我们想检索这些数据,那么我们有该变量的默认值如下:

Student.java

public class Student implements Serializable {
private static final long serialVersionUID = 1L;
int id;
String name;
static String college;
transient int age;
public Student(int id,String name,int age) {
    this.id=id;
    this.name=name;
    college="SVS";
    this.age=age;
}
}

和Deserialization.java

public class Deserialization {
public static void main(String ar[]) throws Exception {
    ObjectInputStream in = new ObjectInputStream(new FileInputStream("SerializeOutput.txt"));
    Student s = (Student) in.readObject();
    Student s1 = (Student) in.readObject();
    System.out.println(s.id + " " + s.name+" "+s.age);
    System.out.println(s1.id + " " + s1.name+" "+s1.age);
    in.close();
}
}

这里,我有idname的原始值,但我得到的age的值为0(我知道int)。

我想检索age的原始值。

是否可以检索所需的值?

标记为transient的成员不会被序列化,因此age不是对象持久状态的一部分。

反序列化时,由于没有为age字段保留任何数据,因此它将获得int(0)的Java默认值。

否。如果一个字段被标记为transient,那么它根本没有被序列化,它在类的序列化格式中完全缺失。因此,数据不在那里供您检索。

最新更新