이번엔 다른 예제로 writeReplace와 readResolver를 사용해보자..

얕은 지식으론 설명에 한계가 있기 때문에 그냥 이럴때 이렇게 사용한다더라.. 정도의 상황 설명이....


다음과 같은 Json객체를 직렬화 하려고 한다. 물론 설명을 위해 억지로 만들어진 객체이다 - -;;


앞서 Person객체를 직렬화 했던 방법과 동일하다. 그러나.......


테스트는 통과하지 못하고..

Json객체가 필드로 가지고 있는 JsonObject객체를 직렬화 할수 없다는 예외가 발생한다.

JsonObject객체는 Serializable를 구현하지 않은 객체라서 직렬화 할수 없었다.


물론 필드를 직렬화에 포함시키지 않는 방법이 있다.

 * 참고 - private transient JsonObject jso;


암튼, 미션은 JsonObject도 함께 직렬화를 해야한다는 것인데.. (수석님이 여러가지 꼼수들을 보여주셨지만 그건 패스하고...- -;;)

writeReplace와 readResolve를 사용해서 해결한다.


writeReplace 할때 Proxy객체를 하나 정의해서 jsonString을 잠시 보관하고 Proxy객체를 리턴한다.

그리고 읽어올땐 Proxy객체에 정의된 readResolve를 통해 다시 Json객체를 생성해서 리턴한다.

둘다 리턴되는 값은 Serializable를 구현한 객체만 가능하다.


상당히 간단한 예제였기 때문에 쉬워보일수도 있는데 좀 덩치큰 객체들이 직렬화 될때를 상상해보면 저런 후킹 메서드들을 어떻게 잘 사용할수 있을지 걱정이 된다......

'Java' 카테고리의 다른 글

decompile..  (0) 2015.11.10
ConcurrentModificationException  (0) 2012.11.08
Serializable, 직렬화 (1)  (0) 2012.08.30

+ Recent posts