2012-03-21 2 views
2

개체를 직렬화하면 포인터가 따라옵니다. 트리 데이터 구조가 있고 트리의 루트와 다른 모든 객체가 직렬화를 구현한다고 가정 해 보겠습니다. 내 클래스는이직렬화 및 포인터 Java

클래스 트리처럼 보이는 ... 개인 노드 루트 : 이 ...

이는 명시 적으로 선언 된 인스턴스 변수 인 루트를 따라 할 수 있습니까? 지적 된 요소가 구성원이 아니더라도 전체 트리를 저장합니까? 또한 복원 될 때 데이터 구조가 완전히 다시 생성됩니까?

+0

Java에 포인터가 없습니다. – Perception

+0

Java에 포인터가 있습니다. Hava는 포인터를 처리하고 있으며 포인터가 없으면 작동하지 않습니다. 사용자가 사용하기가 어렵습니다. 그리고 객체 참조는 추상화 된 형태의 포인터입니다. 실제로 그것들은 java 정의로 구현되지는 않지만 구현되어 있습니다. 포인터가 있지만 쉽게 액세스 할 수있는 포인터 연산 또는 기능이 없습니다. –

답변

7

예, 루트 개체와 모든 필드 (해당 개체의 모든 필드 등)가 Serializable 인 경우 직렬화는 발견 된 각 포인터/참조를 따라 전체 구조를 저장합니다. 저장할 수없는 유일한 일은 transient 또는 static으로 선언 된 입력란입니다.

직렬화는 Java가 심지어 circular references을 처리 할만큼 똑똑하다는 점에 유의하십시오.

+1

직렬화 할 수없는 상위 클래스에있는 데이터를 직렬화하지 않는다는 점을 추가 할 수도 있습니다. –

+0

나는 그것을 고려하지 않았기 때문에 직렬화가 가능한 한 전체 상속 계층을 저장합니까? – rubixibuc

+0

직렬화 프로세스를 사용자 정의 (예 : 직렬화 불가능한 수퍼 클래스의 필드를 처리) 할 수있는 적절한 방법이 있습니다. 이것은 재미있는 읽을 거리가 될 것입니다 : http://java.sun.com/developer/technicalArticles/Programming/serialization/ – aroth