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;
}
@Override
public 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
:用于版本控制,如果类结构发生变化,需要更新版本号。