2011-08-19 2 views
4

두 곳에서 나는 종종 writeReplacereadResolve을 사용하는데, 때로는 매우 장황해진다. Externalizable을 사용하는 것이 더 좋을지 궁금합니다 (실제로는 내 개체가 대부분 불변이기 때문에 실제로 그렇게 생각하지 않습니다.하지만 잘못되었을 수 있습니다). Externalizable을 사용하는 좋은 예를 들려 주시겠습니까?writeReplace + readResolve 대신 Externalizable을 사용하는 경우?

답변

-2

반사 오버 헤드가 없으므로 Externalizable이 기본 직렬화보다 훨씬 빠르다고 들었습니다. 최종 필드 작업은 writeReplacereadResolve을 사용하여 I recently realized으로 해결할 수 있습니다.

+0

Externalizable이 일반적으로 더 빠를 이유가 없습니다. 단지 직렬화를 직접 구현할 수 있습니다. 성능은 구현에 따라 다릅니다. – Sandro

+0

@Sandro 필자는 분명히 "정상적인"구현을 가정하고 있는데, 이는 "직렬화 가능"과 거의 같지만 반사 오버 헤드가 없다. 물론, 원한다면 약간의 오버 헤드를 추가 할 수 있습니다. 일부 압축은 이해할 수 있지만 (AFAIK 일부 ​​블룸 필터 구현에서는 가능하지만) 사과와 사과를 비교합시다. – maaartinus

1

어떻게 비교할 지 모르겠다. writeReplace() 등은 원할 때 대용 객체를 작성합니다. Externalizable은 현재 개체와 그 기본 개체의 전체 serialization을 담당합니다.

writeReplace()를 사용하여 얻은 동기는 무엇입니까?

+0

다른 이유가있었습니다. 최근 누군가 (어떤 이유로 든)'AWTEventDispatcher'를 참조하는 svg 문서를 포함하는 클래스를 직렬화하는 동안'writeReplace'를 사용하도록 조언했습니다. 이전에는 클래스 이미지를 훨씬 더 컴팩트하게 만들기 위해 (아마 조숙 한 최적화)이를 사용했습니다. – maaartinus

관련 문제