扔个三星炸死你2017-06-30 09:58:37
객체가 직렬화되면 Java의 기본 직렬화 규칙에 따라 객체의 모든 멤버가 직렬화되어야 합니다. 즉, 이러한 클래스는 직렬화 가능을 구현해야 합니다.
그래서 수정하는 방법은 두 가지가 있습니다. 하나는 Address에 Serialized 인터페이스를 구현하는 것이고, 다른 하나는 Person의 주소 멤버에 transient
표시를 추가하여 해당 멤버가 직렬화되지 않도록 하는 것입니다.
typecho2017-06-30 09:58:37
주소 멤버를 직렬화해야 하는 경우 주소 클래스도 Serialized 인터페이스를 구현해야 합니다.
주소 멤버를 직렬화할 필요가 없는 경우 transient 키워드를 추가하면 주소 멤버가 직렬화되지 않고 값이 null이 됩니다. 다음과 같습니다:
물론 다른 방법도 있습니다:
예를 들어 Externalized 인터페이스를 구현하고 readExternal(ObjectInput in) 및 writeExternal(ObjectOutput out) 메서드를 재정의합니다.
또한 Externalized인터페이스 메소드의 대체 구현이 있거나 writeObject(ObjectOutputStream obs) 및 readObject(ObjectInputStream ois) 메소드를 추가하여 Serialized 인터페이스를 구현하는 방법도 있습니다.
주소가 Serialized를 구현해야 하는 이유를 다시 말해주세요. 아니면 직렬화하기 위해 transient 키워드 Person을 추가해야 하나요?
먼저 처리 없이 객체를 유지하기 위해 ObjectOutputStream을 사용하여 발생한 예외를 살펴보겠습니다.
보기 ObjectOutputStream소스 코드:
으아악작성되는 객체 유형이 String, Array, Enum 또는 Serialized인 경우 직렬화할 수 있고, 그렇지 않으면 NotSerializedException이 발생함을 알 수 있습니다. 그리고 객체를 직렬화하면 현재 객체 자체도 직렬화될 뿐만 아니라 해당 객체가 참조하는 다른 객체도 직렬화됩니다.