This is an old revision of the document!
Serializarea reprezintă procesul prin care un obiect Java este transformat într-o secvență de bytes, astfel încât să poată fi:
Operația inversă se numește deserializare.
Serializarea este folosită în special pentru:
Pentru ca un obiect să poată fi serializat, clasa sa trebuie să implementeze interfața java.io.Serializable.
public class User implements Serializable { private String name; private int age; }
Serializable este un marker interface, nu definește metode și JVM verifică la runtime prezența lui.NotSerializableException.
1. Clasa model
import java.io.Serializable; public class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return name + " (" + age + ")"; } }
2. Serializarea unui obiect
import java.io.FileOutputStream; import java.io.ObjectOutputStream; public class SerializeDemo { public static void main(String[] args) throws Exception { Person p = new Person("Ana", 30); ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.ser")); out.writeObject(p); out.close(); System.out.println("Object serialized."); } }
3. Deserializarea unui obiect
import java.io.FileInputStream; import java.io.ObjectInputStream; public class DeserializeDemo { public static void main(String[] args) throws Exception { ObjectInputStream in = new ObjectInputStream(new FileInputStream("person.ser")); Person p = (Person) in.readObject(); in.close(); System.out.println("Deserialized: " + p); } }
Unele câmpuri NU trebuie serializate:
Pentru acestea folosim proprietatea transient.
public class Account implements Serializable { private String username; private transient String password; }
password ca fiind transient, acesta nu este salvat, iar după deserializare devine null.
Câmpul serialVersionUID identifică versiunea clasei serializate.
private static final long serialVersionUID = 1L;
Fără UID explicit: