산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

자바 - 직렬화

Java는 객체 직렬화라고 하는 메커니즘을 제공합니다. 여기서 객체는 객체의 데이터와 객체의 유형 및 객체에 저장된 데이터 유형에 대한 정보를 포함하는 바이트 시퀀스로 표현될 수 있습니다.

직렬화된 개체가 파일에 작성된 후에는 파일에서 읽고 역직렬화할 수 있습니다. 즉, 개체와 해당 데이터를 나타내는 유형 정보와 바이트를 사용하여 메모리에 개체를 다시 만들 수 있습니다.

가장 인상적인 것은 전체 프로세스가 JVM에 독립적이라는 점입니다. 즉, 한 플랫폼에서 개체를 직렬화하고 완전히 다른 플랫폼에서 역직렬화할 수 있습니다.

ObjectInputStream 클래스 및 ObjectOutputStream 개체를 직렬화 및 역직렬화하는 방법을 포함하는 상위 수준 스트림입니다.

ObjectOutputStream 클래스에는 다양한 데이터 유형을 작성하기 위한 많은 쓰기 메서드가 포함되어 있지만 특히 한 가지 방법이 눈에 띕니다.

public final void writeObject(Object x) throws IOException

위의 메서드는 Object를 직렬화하여 출력 스트림으로 보냅니다. 유사하게, ObjectInputStream 클래스는 객체를 역직렬화하기 위한 다음 메소드를 포함합니다 -

public final Object readObject() throws IOException, ClassNotFoundException

이 메서드는 스트림에서 다음 Object를 검색하고 역직렬화합니다. 반환 값은 Object이므로 적절한 데이터 유형으로 변환해야 합니다.

Java에서 직렬화가 어떻게 작동하는지 보여주기 위해 이 책의 초반부에 논의한 Employee 클래스를 사용할 것입니다. Serializable 인터페이스를 구현하는 다음 Employee 클래스가 있다고 가정합니다. -

public class Employee implements java.io.Serializable {
   public String name;
   public String address;
   public transient int SSN;
   public int number;
   
   public void mailCheck() {
      System.out.println("Mailing a check to " + name + " " + address);
   }
}

클래스가 성공적으로 직렬화되려면 두 가지 조건이 충족되어야 합니다.

Java 표준 클래스가 직렬화 가능한지 여부가 궁금한 경우 해당 클래스에 대한 설명서를 확인하십시오. 테스트는 간단합니다. 클래스가 java.io.Serializable을 구현하면 직렬화 가능합니다. 그렇지 않으면 그렇지 않습니다.

객체 직렬화

ObjectOutputStream 클래스는 Object를 직렬화하는 데 사용됩니다. 다음 SerializeDemo 프로그램은 Employee 개체를 인스턴스화하고 파일로 직렬화합니다.

프로그램 실행이 완료되면 employee.ser라는 파일이 생성됩니다. 프로그램은 출력을 생성하지 않지만 코드를 연구하고 프로그램이 수행하는 작업을 확인합니다.

참고 − 객체를 파일로 직렬화할 때 Java의 표준 규칙은 파일에 .ser를 제공하는 것입니다. 확장자.

import java.io.*;
public class SerializeDemo {

   public static void main(String [] args) {
      Employee e = new Employee();
      e.name = "Reyan Ali";
      e.address = "Phokka Kuan, Ambehta Peer";
      e.SSN = 11122333;
      e.number = 101;
      
      try {
         FileOutputStream fileOut =
         new FileOutputStream("/tmp/employee.ser");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(e);
         out.close();
         fileOut.close();
         System.out.printf("Serialized data is saved in /tmp/employee.ser");
      } catch (IOException i) {
         i.printStackTrace();
      }
   }
}

객체 역직렬화

다음 DeserializeDemo 프로그램은 SerializeDemo 프로그램에서 생성된 Employee 개체를 역직렬화합니다. 프로그램을 연구하고 그 결과를 결정하십시오 -

import java.io.*;
public class DeserializeDemo {

   public static void main(String [] args) {
      Employee e = null;
      try {
         FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
         ObjectInputStream in = new ObjectInputStream(fileIn);
         e = (Employee) in.readObject();
         in.close();
         fileIn.close();
      } catch (IOException i) {
         i.printStackTrace();
         return;
      } catch (ClassNotFoundException c) {
         System.out.println("Employee class not found");
         c.printStackTrace();
         return;
      }
      
      System.out.println("Deserialized Employee...");
      System.out.println("Name: " + e.name);
      System.out.println("Address: " + e.address);
      System.out.println("SSN: " + e.SSN);
      System.out.println("Number: " + e.number);
   }
}

이것은 다음 결과를 생성합니다 -

출력

Deserialized Employee...
Name: Reyan Ali
Address:Phokka Kuan, Ambehta Peer
SSN: 0
Number:101

다음은 주목해야 할 중요한 사항입니다 -


java

  1. 자바 최종 키워드
  2. 자바 instanceof 연산자
  3. 자바 중첩 정적 클래스
  4. 자바 익명 클래스
  5. 자바 싱글톤 클래스
  6. 자바 리플렉션
  7. 자바 ObjectOutputStream 클래스
  8. 자바 제네릭
  9. 자바 파일 클래스
  10. 자바 - 객체와 클래스