2009-11-17 2 views
0

개체를 deserialize 할 때 매우 이해하기 어렵습니다. 특정 주에서 개체를 다시 얻는 방법은 무엇입니까? 객체의 메타 데이터가 포함되어 있습니까?직렬화 된 객체에 메타 데이터가 포함됩니까?

+1

"동기화"는 어떻게 이와 관련이 있습니까? – BalusC

+0

잘못 입력 한 죄송합니다, 해당 serializable, 지금 편집 할 것입니다 .. Thanks – i2ijeya

+1

직렬화 사양은 여기에 있습니다. (http://java.sun.com/javase/6/docs/platform/serialization/spec/serialTOC.html) – skaffman

답변

4

개체가 serialize되면 개체의 클래스가 개체의 비 일시적인 필드 내용과 함께 스트림에 기록됩니다. 디시리얼라이저는 해당 클래스를로드하려고 시도하고 (이를 위해 여러 메커니즘이 있음) 비 일시적인 필드를 채 웁니다.

프로토콜 사양은 여기에 있습니다 : http://java.sun.com/javase/6/docs/platform/serialization/spec/protocol.html

"메타 데이터"에 의해 당신이 클래스에 대한 주석을 참조하는 경우, 다음 아니, 그들은 개체 자체 직렬화하지만 클래스에서 사용할 수 없습니다. 다른 것을 의미한다면, 당신이 의미하는 바를 설명하십시오.

+0

Reckon 즉, 모든 직렬화 된 객체는 자체 메타 데이터를 가지고 있으며 스트림에서 해당 데이터를 참조하여 직렬화가 발생합니다. "메타 데이터"여기에서 언급 한 것은 객체의 속성에 대한 정보입니다. – i2ijeya

+0

"메타 데이터"를 특정 Java 언어 기능으로 설명 할 수 없다면 대답은 "아마도" – kdgregory

0

상위 수준에서 직렬화 스트림에는 개체 내부의 데이터와 관련된 클래스의 이름뿐만 아니라 클래스가 변경되지 않았 음을 보장하는 버전 번호가 포함됩니다. 이 정보를 사용하여 객체의 새 인스턴스를 만들고 이전 인스턴스와 동일한 데이터로 채 웁니다. 이것은 객체 생성 (예를 들어 생성자를 호출 할 필요성)에 대한 모든 일반적인 제약 사항을 피하는 것입니다.

사람들이 혼란스러운 점은 클래스 정의 자체가 직렬화되었다고 생각할 수 있다는 것입니다. 그것은 deserilalized 때 어떤 개체를 다시 만들 것인지 알 수있는 충분한 정보가 포함 된 데이터가 아닙니다. 개체가 deserialize 될 때 클래스 경로의 기존 클래스와 일치해야합니다. 직렬화 이진 데이터에는 클래스가 들어 있지 않습니다.

관련 문제