Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java 직렬화의 개체 그래프

<시간/>

개체 그래프에는 참조를 포함하는 개체도 직렬화되는 경우 자동으로 직렬화되는 개체 집합이 포함됩니다. 직렬화되고 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의 인스턴스가 생성됩니다. 객체는 이러한 스트림을 사용하여 작성됩니다. 나중에 스트림이 닫힙니다. 이것은 데이터를 직렬화하기 위해 한 번 더 수행됩니다. 관련 출력이 콘솔에 표시됩니다.