在Java中,序列化是指将对象的状态(即其成员变量的值)转换为字节流的过程,以便于存储(例如保存到文件)或传输(例如通过网络发送)。这个过程主要用于实现对象的持久化和远程方法调用(RMI)。
要实现序列化,一个类需要实现java.io.Serializable
接口。这个接口是一个标记接口,没有任何方法需要实现。当一个类实现了Serializable
接口时,它的对象就可以被序列化了。
以下是一个简单的示例:
import java.io.Serializable;
class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在这个示例中,Person
类实现了Serializable
接口,因此它的对象可以被序列化。
要序列化一个Person
对象,可以使用java.io.ObjectOutputStream
类。以下是一个简单的示例:
import java.io.*;
public class SerializationExample {
public static void main(String[] args) {
Person person = new Person("John", 30);
try {
FileOutputStream fileOut = new FileOutputStream("person.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(person);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in person.ser");
} catch (IOException i) {
i.printStackTrace();
}
}
}
在这个示例中,我们创建了一个Person
对象,并将其序列化到名为person.ser
的文件中。
要反序列化一个Person
对象,可以使用java.io.ObjectInputStream
类。以下是一个简单的示例:
import java.io.*;
public class DeserializationExample {
public static void main(String[] args) {
Person person = null;
try {
FileInputStream fileIn = new FileInputStream("person.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
person = (Person) in.readObject();
in.close();
fileIn.close();
} catch (IOException i) {
i.printStackTrace();
return;
} catch (ClassNotFoundException c) {
System.out.println("Person class not found");
c.printStackTrace();
return;
}
System.out.println("Deserialized Person...");
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
}
}
在这个示例中,我们从名为person.ser
的文件中反序列化一个Person
对象,并打印其属性值。