本文共 3347 字,大约阅读时间需要 11 分钟。
前言
有没有想过如何将对象进行“加密”后写入磁盘?这时候,序列化技术就派上用场!它能将对象的状态信息转换为可以存储或传输的形式,提供了一种优秀的解决方案。
序列化(Serialization)是一项将对象的状态信息转换为可以存储或传输的格式的过程。在序列化过程中,对象会将自身的当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。这种机制在管理远程对象或实现数据持久化时尤为重要。
为了更直观地理解序列化,我们可以通过简单的Java实验来体验其工作原理。
下面是一个实现序列化接口的Java实体类:
package exercise;import java.io.Serializable;public class Person implements Serializable { private String name; private int age; public Person() {} public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } public Person(String name, int age) { super(); this.name = name; this.age = age; }} 以下是一个实现单对象序列化的Java程序:
package exercise;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class ObjectStreamDemo1 { public static String PATH = "obj.object1"; public static void main(String[] args) throws IOException { writeObj(); readObj(); System.out.println("--End--"); } public static void readObj() throws IOException { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(PATH)); Person p = (Person) ois.readObject(); System.out.println(p.getName() + "|" + p.getAge()); } public static void writeObj() throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(PATH)); oos.writeObject(new Person("张三", 30)); oos.close(); }} 运行该程序后,会在文件系统中生成一个名为obj.object1的二进制文件。由于二进制文件为机器可读,使用Notepad打开会看到一堆杂乱的字符,这正是序列化的正常现象。
以下是一个实现多对象序列化的Java程序:
package exercise;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.ArrayList;import java.util.List;public class ObjectStreamDemo2 { public static String PATH = "obj.object"; public static void main(String[] args) throws IOException { List persons = new ArrayList<>(); Person p1 = new Person("张三", 18); Person p2 = new Person("李四", 19); persons.add(p1); persons.add(p2); writeObj(persons); readObj(); System.out.println("---end!---"); } private static void writeObj(List persons) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(PATH)); oos.writeObject(persons); oos.close(); } private static void readObj() throws IOException { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(PATH)); List persons = (List ) ois.readObject(); for (Person p : persons) { System.out.println(p.getName() + "|" + p.getAge()); } }} 运行上述程序会生成obj.object文件。就像之前的例子一样,使用Notepad打开该文件会看到二进制内容,但这是种预期现象。
在实际应用中,请注意以下几点:
java.io.Serializable,否则会抛出NotSerializableException异常。通过本文的学习,我们了解了序列化技术的基本原理及其在Java中的应用方法。无论是在将一个单个对象写入文件,还是实现一个复杂的多对象序列化,这项技术都能轻松应对。希望通过这些实例和解释,您能对序列化有更清晰的理解,并在实际开发中灵活运用这一技术。
转载地址:http://hiryk.baihongyu.com/