[Java] writeObject 와 readObject 는 무엇인가? |
참조 : http://www.javablogging.com/what-are-writeobject-and-readobject-customizing-the-serialization-process/
-
serialize 하고 싶은 객체에 Serializable interface 만 implements 해주면 serialize 가 가능하다.
-
ObjectOutputStream 을 이용하여 stream 형태로 만들어 file 에 쓰거나 전송할 수 있다.
-
transient 나 static 으로 마크되지 않은 필드들은 모두 serialized 된다.
-
기본적인 serialization 에 추가적으로 어떤 조치를 취하고 싶다면
아래와 같이 writeObject 와 readObject 를 기술해줘야 한다.
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject();
oos.writeInt(data);
}
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
ois.defaultReadObject();
data = ois.readInt();
}
-
보통 super class 가 serializable 이 아닌데, sub class 가 serializable 한 경우 super 의 field 들도 serialize 시켜줄 때 사용되거나, 어떤 값이 time base 와 같이 시점에 의미를 갖는 값일 때 등의 경우에 사용된다.
-
writeObject, readObject 가 기술되어 있다면,
default serialization 과정에서 ObjectOutputStream 과 ObjectInputStream 가 각각 위의 메소드들을 호출한다.
writeObject 와 readObject 가 private 으로 기술되어 있다는 사실에 주목해볼만 하다.
Object 에 있는 녀석도 아니고, Serializable 에 있는 녀석도 아니다.
ObjectOutputStream 과 ObjectInputStream 은 reflection 으로 각각을 수행한다.
-
defaultWriteObject() 와 defaultReadObject() 는 각각 기본 serialization 을 수행한다.
따라서 custom serialization 의 전후에 반드시 호출해줘야 한다.
물론 순서도 중요하다는 것을 잊지 말자.
-
아래 링크는 Serialization 에 대한 전반적인 내용을 담고 있다. - Very good
http://cremazer.blogspot.kr/2013/09/java-serialization.html#index1
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] Localize 에 대한 이야기. (0) | 2016.11.10 |
---|---|
[java] readResolve, writeReplace 뭐 하는 녀석일까? (0) | 2016.11.03 |
[Java] Generic explicit type parameter 이야기 (0) | 2016.10.18 |
WeakHashMap 에 대해 제대로 이해하자. (0) | 2016.10.13 |
[android] Fragment 와 함께라면 Configuration Change 가 무섭지 않아. (0) | 2016.10.12 |
댓글