정확히 무엇을 요구 하느냐에 달려 있습니다. 당신이 넣은 것보다 다른 값을 얻고 싶다면, 직렬화를 통해 할 수 있습니다. serialize 된 데이터는 메모리에있는 A
의 인스턴스에서 완전히 분리됩니다. Java가 직렬화 된 데이터에서 오브젝트를 재구성 할 때, 데이터를 작성하는 데 사용 된 A
의 원래 인스턴스에 대해서는 알지 못하거나 신경 쓰지 않습니다. 직렬화 된 정보에서 제공되는 청사진을 기반으로 메모리에 데이터 구조를 간단히 구성합니다.
따라서 A
을 재구성 할 때 얻은 결과를 수정하려면 이진 직렬화 된 데이터를 수동으로 수정하면됩니다. 그렇게하려면 Java의 직렬화 형식을 잘 이해해야하지만 확실히 할 수 있습니다.
A
의 원래 인스턴스를 직렬화를 통해 수정할 수 있는지 묻는다면 (예를 들어, 직렬화를 통해 새 인스턴스를 구성하지 않고도 값이 변경되는 동일한 객체를 얻는 것처럼), 대답 아니오, 할 수 없습니다. 직렬화는 객체의 현재 상태에 대한 스냅 샷을 작성하기 만합니다. 직렬화 해제는 소스 인스턴스에서 완전히 분리 된 새 오브젝트 인스턴스를 작성합니다. 따라서 값을 수동으로 변경할 수도 있지만 새로운 값을 가진 새 객체는 일단 비 직렬화되면 여전히 변경되지 않습니다.
불변 클래스 A
의 인스턴스를 직렬화 한 다음 데이터를 A
클래스의 인스턴스로 식별하지만 무언가로 데이터를 deserialize하는 방법이 있는지 묻는다면 대답도 가능합니다. 직렬화 된 데이터는 표현되는 오브젝트의 클래스를 지정하지만 클래스 정의 자체는 직렬화되지 않습니다. 따라서 A
의 인스턴스를 직렬화 한 다음 변경 가능한 클래스 B
의 인스턴스를 deserialize하도록 A
의 변경 가능한 인스턴스를 가져 오는 것과 같지 않도록 지정된 클래스를 변경할 수 있습니다.