Java 序列化中的对象图
javaserver side programmingprogramming
对象图包含一组对象,这些对象会自动序列化,前提是包含引用的对象也会被序列化。任何序列化且包含对象引用的对象,对象引用都会被 JVM 序列化。
示例
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class One implements Serializable{ Two s2 = new Two(); } class Two implements Serializable{ Three s3 = new Three(); } class Three implements Serializable{ int i = 34; int j = 67; } public class Demo_Serialize{ public static void main(String args[]) throws Exception{ One s1 = new One(); FileOutputStream my_fos = new FileOutputStream("abc.ser"); ObjectOutputStream my_oos = new ObjectOutputStream(my_fos); my_oos.writeObject(s1); my_fos.close(); my_oos.close(); FileInputStream my_fis = new FileInputStream("abc.ser"); ObjectInputStream my_ois = new ObjectInputStream(my_fis); One my_obj = (One) my_ois.readObject(); my_fis.close(); my_ois.close(); System.out.println("序列化后 i 的值为 " + my_obj.s2.s3.i); System.out.println("序列化后 j 的值为 "+my_obj.s2.s3.j); } }
输出
序列化后 i 的值为 34 序列化后 j 的值为 67
名为 ‘One’ 的类继承自 ‘Serializable’ 类。此处创建了另一个不同类的实例。该类由 ‘Serializable’ 类继承。同样,在这个类中创建了一个不同的实例。
另一个类继承了‘Serializable’类。这里定义了两个整数,并创建了另一个名为‘Demo_Serialize’的类。这里定义了主函数。定义了第一个类的实例,并创建了FileOutputStream和ObjectOutputStream的实例。使用这些流写入对象。稍后,关闭流。再次执行此操作以序列化数据。相关输出显示在控制台上。