자바 직렬화 예제

java.io.Serializable 인터페이스를 구현하는 클래스의 개체만 직렬화할 수 있습니다. Serializable은 마커 인터페이스입니다(데이터 멤버 및 메서드가 없음). 이러한 클래스의 개체가 특정 기능을 얻을 수 있도록 java 클래스를 “표시”하는 데 사용됩니다. 마커 인터페이스의 다른 예는 다음과 같습니다: – 복제 및 원격. Person 클래스를 사용하여 직렬화를 설명해 보겠습니다. 정적 필드는 개체가 아닌 클래스에 속하며 직렬화되지 않습니다. 또한, 우리는 직렬화 하는 동안 클래스 필드를 무시 하는 임시 키워드를 사용할 수 있습니다 참고: “기본값” 값으로 이해 하는 것은 Java 컴파일러 비 초기화 된 멤버 필드에 제공 하는 값, 그러나, 내 경우에는 내가 기본값을 사용 생각 하지 않습니다- I 값 10(정수 유형)으로 초기화했습니다. 컴파일러가 제공하는 기본값은 0이어야 합니다. 제안 된 읽기 :1- 자바 온라인 테스트 – 직렬화에 대한 20 질문. 런타임의 직렬화 프로세스는 id를 SerialVersionUID라고 하는 각 직렬화 가능한 클래스와 연결합니다. 직렬화된 개체의 송신자 및 수신기를 확인하는 데 사용됩니다.

발신자와 수신자는 동일해야 합니다. 이를 확인하기 위해 SerialVersionUID가 사용됩니다. 보낸자와 수신자는 동일한 SerialVersionUID를 가져야 하며, 그렇지 않으면 개체를 역직렬화할 때 InvalidClassException이 throw됩니다. 우리는 또한 직렬화 클래스에서 우리 자신의 SerialVersionUID를 선언할 수 있습니다. 이렇게 하려면 SerialVersionUID 필드를 만들고 값을 할당해야 합니다. 정적 및 최종 형식이 긴 형식이어야 합니다. 클래스에서 serialVersionUID 필드를 명시적으로 선언하고 개인 으로도 두는 것이 좋습니다. 예를 들어 Java Object 클래스가 직렬화 가능한 인터페이스를 구현하지 않는 이유에 대한 질문이 있습니다. 당신은 나에게 설명을 제공하시기 바랍니다 수 있습니다. 바이트 스트림을 읽고 Java 개체로 다시 변환할 수 있습니다. 그런 다음 원래 개체로 다시 캐스팅할 수 있습니다.

1- 직렬화는 재귀 메커니즘에 따라 달라집니다. 자식 클래스 개체의 직렬화가 시작 되면 이러한 변수의 Object 클래스에 도달할 때까지 계속되는 부모 클래스 체인에서 다른 인스턴스 변수의 직렬화를 트리거합니다. 그것은 많은 오버 헤드로 이어집니다. 2- 객체 클래스 설명 정보를 직렬화하는 동안 스트림에 첨부된다. 많은 데이터와 메타데이터가 성능을 저하시고 있습니다. 3- 직렬화는 클래스 수준 변경 사항을 추적하기 위한 직렬 버전 ID도 필요합니다. 수동으로 설정하지 않으면 직렬화는 모든 필드와 메서드를 통해 자동으로 계산됩니다. 클래스의 크기가 많을수록 값을 계산하는 시간이 됩니다. 따라서 이것은 다시 잠재적인 성능 문제입니다.

4- 우리는 외부화 인터페이스와 위의 모든 문제를 해결할 수 있습니다. 개체를 다시 만들지 않고 해당 클래스를 호출하려면 어떻게 됩니까? 이러한 경우 데이터를 바이트 스트림으로 변환하여 직렬화 개념을 사용하는 것입니다. 참고 – 파일에 개체를 직렬화 할 때, 자바의 표준 규칙은 파일에 .ser 확장을 제공하는 것입니다.