2014-10-20 1 views
1

В Java Deserialization ключевое слово transient используется для ограничения данных от пользователя. Если мы хотим, чтобы получить эти данные, то есть значение по умолчанию этой переменной следующим образом:Как извлечь член из файла, объявленного как переходный в концепции десериализации Java?

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.

Возможно ли получить требуемое значение?

+2

В случае, если поле отмечено как «переходный», java не будет записывать его в выходной поток, когда объект сериализуется. Поскольку у вас нет его в потоке, вы не можете получить значение. –

+0

Спасибо много..Андрю – Bosco

ответ

0

Члены, помеченные как transient, не будут сериализованы, следовательно age не является частью постоянного состояния объекта.

Когда вы де-сериализуете, так как нет данных, сохраненных для поля age, оно получает значение по умолчанию Java для int (0).

+0

Спасибо ... Я получил его – Bosco

0

№ п. Если поле помечено как transient, то оно не сериализовано вообще, оно полностью отсутствует в сериализованном формате класса. Таким образом, данные не доступны для вас.

Смежные вопросы