GeeksforGeeks (한국어)

직렬화 메커니즘을 변환하는 개체의 상태로 바이트다. Deserialization 은 바이트 스트림이 메모리의 실제 Java 객체를 다시 만드는 데 사용되는 역 프로세스입니다. 이 메커니즘은 객체를 유지하는 데 사용됩니다.

바이트 스트림을 만들어 플랫폼 독립적이다. 따라서 한 플랫폼에서 직렬화 된 객체는 다른 플랫폼에서 직렬화 해제 될 수 있습니다.,

Java 객체를 직렬화 가능하게 만들기 위해 java.io.Serializable 인터페이스를 구현합니다.
ObjectOutputStream 클래스에는 객체를 직렬화하기위한 writeObject()메소드가 포함되어 있습니다.

public final void writeObject(Object obj) throws IOException

ObjectInputStream 클래스에는 객체를 역 직렬화하기위한 readObject()메소드가 포함되어 있습니다.

public final Object readObject() throws IOException, ClassNotFoundException

직렬화의 장점
1. 객체의 상태를 저장/유지하려면.
2 입니다. 네트워크를 통해 개체를 이동하려면.

java.io.Serializable 인터페이스를 구현하는 해당 클래스의 객체 만 직렬화 할 수 있습니다.,
Serializable 은 마커 인터페이스입니다(데이터 멤버 및 메소드가 없음). 이러한 클래스의 객체가 특정 기능을 얻을 수 있도록 java 클래스를”표시”하는 데 사용됩니다. 마커 인터페이스의 다른 예는 다음과 같습니다.-Cloneable 및 Remote.

기억해야 할 점
1. 부모 클래스가 직렬화 가능 인터페이스를 구현 한 경우 자식 클래스는이를 구현할 필요가 없지만 그 반대는 사실이 아닙니다.
2 입니다. 직렬화 프로세스를 통해 비 정적 데이터 멤버 만 저장됩니다.
3. 정적 데이터 멤버 및 일시적인 데이터 멤버는 직렬화 프로세스를 통해 저장되지 않습니다.,따라서 정적이 아닌 데이터 멤버의 값을 저장하지 않으려면 일시적으로하십시오.
4. 객체의 생성자는 객체가 직렬화 해제 될 때 결코 호출되지 않습니다.
5. 관련 객체는 직렬화 가능 인터페이스를 구현하고 있어야합니다.
예:

class A implements Serializable{// B also implements Serializable// interface.B ob=new B(); }

SerialVersionUID
직렬화 런타임 연결하는 버전 번호를 서로 직렬화라는 클래스 SerialVersionUID 시에 사용되는 직렬화하지 확인하는 송신자와 수신기의 직렬화된 객체로드 클래스가 해당 개체에 대한 호환되는 대 serialization., 는 경우 수신기 로드 클래스에 대한 개체를 다른 UID 는 해당 보낸 사람의 클래스를 진행하고 결과에 InvalidClassException. 직렬화 가능 클래스는 필드 이름을 선언하여 자체 UID 를 명시 적으로 선언 할 수 있습니다.
정적,최종 및 유형이어야합니다.
나는.,e-모든 액세스-수정 static final long serialVersionUID=42L;

경우 클래스는 직렬화하지 않는 명시적으로 선언 serialVersionUID,다음 serialization 런타임을 계산하는 기본값에 대한 해당 클래스에 따라 다양한 측면의 클래스에서 설명한 대로,Java 객체를 직렬화한다. 그러나 그것은 강력하게 권장하는 모든 명시적으로 직렬화 가능 클래스를 선언 serialVersionUID 값을,이후 계산을 매우 민감한 클래스 세부 사항에 따라 달라질 수 있습 컴파일러 구현,어떤 변경에서 클래스를 사용하거나 다른 id 에 영향을 미칠 수 있는 직렬화된 데이터입니다.,

상속 된 멤버로 유용하지 않기 때문에 uid 에 개인 한정자를 사용하는 것이 좋습니다.

serialver
serialver 는 JDK 와 함께 제공되는 도구입니다. Java 클래스의 serialVersionUID 번호를 얻는 데 사용됩니다.,
실행할 수 있습니다면 다음 명령을 얻을 serialVersionUID

serialver

예제 1:



출력:

Object has been serializedObject has been deserialized a = 1b = geeksforgeeks

예제 2:



출력:

Object has been serializedData before Deserialization.name = abage = 20a = 2b = 1000Object has been deserializedData after Deserialization.name = abage = 20a = 0b = 2000

에 대한 설명이 출력:
당신이 볼 수있는 동안 deserialize 체의 값을 a 와 b 가 변경되었습니다. A 인 이유는 일시적인 것으로 표시되었고 b 는 정적이었습니다.,
과도 변수의 경우:-과도 키워드로 정의 된 변수는 직렬화 프로세스 중에 직렬화되지 않습니다.이 변수는 직렬화 해제 중에 기본값으로 초기화됩니다. (예:객체의 경우 null,int 의 경우 0).
정적 변수의 경우:-정적 키워드로 정의 된 변수는 직렬화 프로세스 중에 직렬화되지 않습니다.이 변수는 직렬화 해제 중에 클래스에 정의 된 현재 값으로로드됩니다.

이 기사는 Mehak Narang 과 Shubham Juneja 가 기고 한 것입니다., 는 경우 다음과 같 GeeksforGeeks 및 참여하고 싶다면,당신은 또한 수를 사용하여 문서를 써주세요 contribute.geeksforgeeks.org 또는 메일로서 귀하의 문서 [email protected]. 시 기사에 나오는 GeeksforGeeks 메인 페이지 및 도움말 기타 괴짜입니다.
잘못된 것을 발견하거나 위에서 논의한 주제에 대해 더 많은 정보를 공유하고 싶다면 의견을 적어주십시오.

주의 독자! 지금 배우는 것을 멈추지 마십시오., 모든 중요한 Java 기초 개념 컬렉션의 기초와 Java 자바 컬렉션은 물론에서 학생들에게 적당한 가격이 될 산업 준비합니다.

기사 태그:

Java
연습 태그:

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다