在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();
}
}
这里,我有id
和name
的原始值,但我得到的age
的值为0(我知道int)。
我想检索age
的原始值。
是否可以检索所需的值?
标记为transient
的成员不会被序列化,因此age
不是对象持久状态的一部分。
反序列化时,由于没有为age
字段保留任何数据,因此它将获得int
(0)的Java默认值。
否。如果一个字段被标记为transient
,那么它根本没有被序列化,它在类的序列化格式中完全缺失。因此,数据不在那里供您检索。