의 위키,직렬화(또는 바코드 표시)를 번역하는 과정 데이터 구조나 객체의 상태는 형식으로 저장할 수 있습니다(예를 들어,파일 또는 메모리 버퍼)또는 전송되는(예를 들어,네트워크를 통해 연결 링크)및 복원중에(아마도 다른 컴퓨터에서)라고 합니다.을 때의 결과로 시리즈의 비트입니 다시 읽에 따르면 직렬화 형식으로 그것을 만드는 데 사용할 수 있는 의미가 동일한 복제의 원본 개체입니다.,
그래서 기본적으로 직렬화입니다 변환하는 프로세스 개체 시퀀스로의 바이트를 지속할 수 있는 디스크 또는 데이터베이스 또는 전송할 수 있을 통해 스트림이 있습니다. 바이트 시퀀스에서 객체를 만드는 역 프로세스를 역 직렬화라고합니다.
직렬화하고 직렬화에 java
직렬화하고 deserialize 우리의 객체를 파일에 우리는 전화ObjectOutputStream.writeObject()
및ObjectInputStream.readObject()
.,
클래스는 객체를 성공적으로 직렬화하기 위해java.io
패키지에 존재하는 직렬화 가능 인터페이스를 구현해야합니다. Serializable 은이를 구현하는 클래스에 serializable 동작을 추가하는 마커 인터페이스입니다.
Java 제공하는 직렬화 캡슐화된 API 에서java.io
패키지를 직렬화하기 위한 나열체를 포함하는,
java.io.serializable
java.io.Externalizable
ObjectInputStream
- 및
ObjectOutputStream
etc.,
포인트를 기억
1. 부모 클래스가 직렬화 가능 인터페이스를 구현 한 경우 자식 클래스는이를 구현할 필요가 없지만 그 반대는 사실이 아닙니다.
2 입니다. 직렬화 프로세스를 통해 비 정적 데이터 멤버 만 저장됩니다.
3. 정적 데이터 구성원 및 임시 데이터 구성원이 저장되지 않습을 통해 직렬화 과정입니다.그래서,당신이 원하지 않는 경우에 저장 값의 정적이 아닌 데이터 구성원이 다음 그것을 일시적이다.
4., 객체의 생성자는 객체가 직렬화 해제 될 때 결코 호출되지 않습니다.
5. 관련 객체는 직렬화 가능 인터페이스를 구현하고 있어야합니다.
SerialVersionUID
직렬화 런타임 연결하는 버전 번호를 서로 직렬화라는 클래스 SerialVersionUID 시에 사용되는 직렬화하지 확인하는 송신자와 수신자 사이의 직렬화된 객체로드 클래스가 해당 개체에 대한 호환되는 대 serialization., 수신자가 해당 보낸 사람의 클래스와 다른 UID 를 가진 개체에 대한 클래스를로드 한 경우 역 직렬화하면 InvalidClassException 이 발생합니다. 직렬화 가능 클래스는 필드 이름을 선언하여 자체 UID 를 명시 적으로 선언 할 수 있습니다.
정적,최종 및 유형이어야합니다.
나는.,e-모든 액세스-수정 static final long serialVersionUID=42L;
경우 클래스는 직렬화하지 않는 명시적으로 선언 serialVersionUID,다음 serialization 런타임을 계산하는 기본값에 대한 해당 클래스에 따라 다양한 측면의 클래스에서 설명한 대로,Java 객체를 직렬화한다. 그러나 그것은 강력하게 권장하는 모든 명시적으로 직렬화 가능 클래스를 선언 serialVersionUID 값을,이후 계산을 매우 민감한 클래스 세부 사항에 따라 달라질 수 있습 컴파일러 구현,어떤 변경에서 클래스를 사용하거나 다른 id 에 영향을 미칠 수 있는 직렬화된 데이터입니다.,
상속 된 멤버로 유용하지 않기 때문에 uid 에 개인 한정자를 사용하는 것이 좋습니다.
과도 변수의 경우:-과도 키워드로 정의 된 변수는 직렬화 프로세스 중에 직렬화되지 않습니다.이 변수는 직렬화 해제 중에 기본값으로 초기화됩니다. (예:객체의 경우 null,int 의 경우 0).
정적 변수의 경우:-정적 키워드로 정의 된 변수는 직렬화 프로세스 중에 직렬화되지 않습니다.이 변수는 직렬화 해제 중에 클래스에 정의 된 현재 값으로로드됩니다.,
에서 직렬화 java
직렬화
연락처 필드 null 기 때문에,그것은 표시되었으로 정적으로 우리는 앞에서 설명한 정적 필드되지 않는 직렬화됩니다.
참고:정적 멤버는 클래스의 객체가 아닌 클래스에 연결되어 있기 때문에 직렬화되지 않습니다.
- 직렬화하는 과정을 저장하는 개체의 상태를 바이트 시퀀스는 다음에서 저장할 수 있는 파일 또는 네트워크를 통해 전송되고 진행하는 프로세스의 재구성하는 개체들에서 바이트입니다.,
Serializable
인터페이스의 하위 클래스만 직렬화할 수 있습니다.- 경우 우리의 클래스를 구현하지 않
Serializable
인터페이스 또는다면 그것을 참조하여 비Serializable
클래스 JVM 에 던져NotSerializableException
. - All
transient
및static
필드는 직렬화되지 않습니다. serialVersionUID
이 있는지 확인하는 데 사용 직렬화된 병렬화된체의 동일한 특성이므로 호환성으로 직렬화.,- 우리 만들기
serialVersionUID
분야에서 우리의 클래스의 경우 그래서 우리는 우리의 클래스의 구조(추가/제거 분야)JVM 지 않을 통해InvalidClassException
. 우리가 그것을 제공하지 않으면 jvm 은 클래스 구조가 변경 될 때 변경 될 수있는 것을 제공합니다. - 우리는 무시할 수 있습 기본 직렬화 행위 안에 우리의 Java 클래스를 제공하여 구현의
writeObject
및readObject
방법이 있습니다., - 그리고 우리는 전화
ObjectOutputStream.defaultWriteObject()
및ObjectInputStream.defaultReadObject
에서는writeObject
및readObject
방법을 기본 직렬화를 진행하고 논리입니다. - 우리는 할 수 있습 던져
NotSerializableException
제외에서writeObject
및readObject
,우리가 원하지 않는 경우 우리의 클래스를 직렬화는 병렬화된.리>팔자>
Leave a Reply