달력

2

« 2025/2 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
2011. 8. 7. 13:06

맞춤화된 직렬화 JAVA이야기2011. 8. 7. 13:06

기본 직렬화 방법은 대부분의 클래스에 적당화지만 모든 경우에 적당한 것은 아니다.
HashMap 클래스는 이 문제를 모두 가졌다.

기본 직렬화는 모든 데이터 구조를 각 요소들의 해시 코드를 포함하여쓴다.
HashMap는 버킷에 데이터가 없을수도 있다. 그러므로 모든 데이터구조를 직렬화한다는 것은 비효율적이다.

이를 해결하기 위해선, HashMap의 모든 데이터 구조를 직렬화하는 것보다는 참조된 키와 요소를 직렬화하고 이들을 재구송하는 것이 더 효율적이다.

HashMap는 private으로 선언된 writeObject와 readObject를 제공한다.
writeObject메소드는 ObjectOutputStream에서 호출되며, readObject메소드는 ObjectInputStream에서 호출

이 메소드들(writeObject, readObject)은 소속 클래스에서만 호출되어야 하며 이 메소드들은 직렬화가 가능하지 않은 슈퍼 클래스의 상태와 소속 클래스에 작성되어 있는 상태에 대해서만 책임을 가져야 한다???????(뭐지)

해당 클래스의 writeObject와 readObject는 슈퍼클래스의 writeObject와 readObject를 호출하지 말아야한다.
객체 직렬화는 이런면에서 finalize와 clone과 다르다.

hash는 transient이기 때문에 직렬화되지 않는다. 

'JAVA이야기' 카테고리의 다른 글

Execution Engine  (0) 2011.08.21
직렬화된 필드  (0) 2011.08.07
직렬화 가능한 클래스 만들기  (0) 2011.07.30
객체 직렬화  (1) 2011.07.30
Data 바이트 스트림  (0) 2011.07.30
:
Posted by НooпeУ


Code Start Code End