3. Java的序列化
Java提供了內置的序列化機制,通過java.io.Serializable
接口實現。
3.1 如何實現Java序列化
-
讓類實現
Serializable
接口。 -
使用
ObjectOutputStream
進行序列化。 -
使用
ObjectInputStream
進行反序列化。
示例代碼
序列化
java
復制
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;class Person implements Serializable {private static final long serialVersionUID = 1L; // 版本號private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person{name='" + name + "', age=" + age + "}";}
}public class SerializationExample {public static void main(String[] args) {Person person = new Person("John", 30);try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {oos.writeObject(person);System.out.println("Object serialized successfully.");} catch (Exception e) {e.printStackTrace();}}
}
反序列化
java
復制
import java.io.FileInputStream;
import java.io.ObjectInputStream;public class DeserializationExample {public static void main(String[] args) {try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {Person person = (Person) ois.readObject();System.out.println("Object deserialized: " + person);} catch (Exception e) {e.printStackTrace();}}
}
3.2 注意事項
-
Serializable
接口是一個標記接口,沒有方法。 -
序列化時會保存對象的字段值,但不會保存方法。
-
如果類中包含非序列化字段,可以使用
transient
關鍵字標記。 -
序列化版本號
serialVersionUID
:用于版本控制,如果類結構發生變化,需要更新版本號。