在Java中,序列化和反序列化是将对象转换为字节流以便在网络上传输或将其存储到磁盘上的过程。序列化是将对象的状态(即其成员变量的值)转换为字节流的过程。反序列化则是将字节流重新转换为对象的过程。
Java提供了java.io.Serializable接口,用于标识一个类的对象可以被序列化。要序列化一个对象,需要实现Serializable接口,并使用java.io.ObjectOutputStream类将其写入字节流中。要反序列化一个对象,需要使用java.io.ObjectInputStream类从字节流中读取对象。
以下是一个简单的示例,演示了如何使用Java序列化和反序列化:
- 首先,创建一个实现Serializable接口的类:
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 "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
- 接下来,使用ObjectOutputStream将对象序列化为字节流:
import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; public class SerializeExample { public static void main(String[] args) { Person person = new Person("John Doe", 30); try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) { oos.writeObject(person); System.out.println("Person对象已成功序列化到文件person.ser"); } catch (IOException e) { e.printStackTrace(); } } }
- 最后,使用ObjectInputStream将字节流反序列化为对象:
import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; public class DeserializeExample { public static void main(String[] args) { Person person = null; try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) { person = (Person) ois.readObject(); System.out.println("Person对象已成功从文件person.ser反序列化"); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } System.out.println(person); } }
运行上述示例,将会看到以下输出:
Person对象已成功序列化到文件person.ser Person对象已成功从文件person.ser反序列化
这表明Java序列化和反序列化已成功实现。