본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Java] writeObject 와 readObject 는 무엇인가?

by 돼지왕 왕돼지 2016. 10. 25.
반응형

 [Java] writeObject 와 readObject 는 무엇인가?


ClassNotFoundException, defaultreadobject, defaultwriteobject, file, implements, Interface, IOException, Java, ObjectInputStream, ObjectOutputStream, Private, readint, readobject, Reflection, Serialize, static, Stream, subclass, Super Class, transient, writeint, writeobject, [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






반응형

댓글