在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
对象,并打印其属性值。