개체 그래프에는 참조를 포함하는 개체도 직렬화되는 경우 자동으로 직렬화되는 개체 집합이 포함됩니다. 직렬화되고 objectreference를 포함하는 모든 개체, 개체 참조는 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("Value of i after it is serialized is " + my_obj.s2.s3.i); System.out.println("Value of j after it is serialized is "+my_obj.s2.s3.j); } }
출력
Value of i after it is serialized is 34 Value of j after it is serialized is 67
'One'이라는 클래스는 'Serializable' 클래스에서 상속됩니다. 여기에서 다른 클래스의 또 다른 인스턴스가 생성됩니다. 동일한 클래스가 'Serializable' 클래스에 의해 상속됩니다. 다시 말하지만, 이 클래스 내에서 다른 인스턴스가 생성됩니다.
다른 클래스는 'Serializable' 클래스를 상속합니다. 여기서 두 개의 정수가 정의되고 'Demo_Serialize'라는 또 다른 클래스가 생성됩니다. 여기에서 main 함수가 정의됩니다. 첫 번째 클래스의 인스턴스가 정의되고 FileOutputStream 및 ObjectOutputStream의 인스턴스가 생성됩니다. 객체는 이러한 스트림을 사용하여 작성됩니다. 나중에 스트림이 닫힙니다. 이것은 데이터를 직렬화하기 위해 한 번 더 수행됩니다. 관련 출력이 콘솔에 표시됩니다.