-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
아이템 87. 커스텀 직렬화 형태를 고려해보라 #89
Comments
기본 직렬화 형태를 그대로 사용할 때 고려해야 할 점
기본 직렬화 선택에 적합한 경우 / 그렇지 않은 경우
public class Name implements Serializable {
/**
* 성. null이 아니어야 함.
* @serial
*/
private final Stirng lastName;
/**
* 이름. null이 아니어야 함.
* @serial
*/
private final String firstName;
/**
* 중간이름. 중간이름이 없다면 null.
* @serial
*/
private final String middleName;
... // 나머지 코드는 생략
}
public final class StringList implements Serializable {
private int size = 0;
private Entry head = null;
private static class Entry implements Serializable {
String data;
Entry next;
Entry previous;
}
... // 나머지 코드는 생략
}
객체의 물리적 표현과 논리적 표현의 차이가 클 때 생기는 문제
합리적인 직렬화 형태
public final class StringList implements Serializable {
private transient int size = 0;
private transient Entry head = null;
// 이번에는 직렬화 하지 않는다. ->
private static class Entry {
String data;
Entry next;
Entry previous;
}
// 지정한 문자열을 리스트에 추가한다.
public final void add(String s) { ... }
/**
* StringList 인스턴스를 직렬화한다.
*/
private void writeObject(ObjectOutputStream stream)
throws IOException {
stream.defaultWriteObject();
stream.writeInt(size);
// 모든 원소를 순서대로 기록한다.
for (Entry e = head; e != null; e = e.next) {
stream.writeObject(e.data);
}
}
/**
* 역직렬화 담당
*/
private void readObject(ObjectInputStream stream)
throws IOException, ClassNotFoundException {
stream.defaultReadObject();
int numElements = stream.readInt();
for (int i = 0; i < numElements; i++) {
add((String) stream.readObject());
}
}
... // 나머지 코드는 생략
}
동기화
private synchronized void writeObject(ObjectOutputStream stream)
throws IOException {
stream.defaultWriteObject();
} UID
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
No description provided.
The text was updated successfully, but these errors were encountered: