2013-02-11 6 views
1

객체에 대해 직렬화가 어떻게 작동하는지 알 수 있습니까? 나는 인터넷 검색을 시도했다. 그러나 그런 이유로 나는 항상 세부 사항에서 길을 잃는다. 클래스의 private/public 변수, 정적 변수 및 private/public 메서드가있는 객체를 직렬화 할 때 알아야합니다. 모든 것이 직렬화되거나 변수 만 얻습니까? 마찬가지로 여러 가지 방법으로 객체를 가진 나쁜 습관이 있는데, 이들은 일련의 활동을 통해 전달되도록 직렬화 될 것입니다.직렬화, 직렬화 된 객체에 여러 메소드가있는 것이 좋지 않습니까?

+1

아마 [이 기사] (http://docs.oracle.com/javase/7/docs/platform/serialization/spec/protocol.html) 도움이 될 것입니다. 또한 [여기] (http://stackoverflow.com/questions/14730150/how-does-java-serialise-the-implementationsof-methods-within-an-object/14730752#14730752) 비슷한 질문이 있습니다. – Pshemo

+0

고마워 .. 좋은 링크 – Snake

답변

4

개체의 상태 만 직렬화됩니다 - 필드, 즉. 메서드 자체는 직렬화되지 않습니다. 그러나 생성 된 버전 번호도 효과적으로 상태의 일부이며, 어떤 메서드가 있는지에 따라 다릅니다. 이 동작은 serialVersionUid 필드로 변경할 수 있지만, 여전히 까다 롭습니다.

개인적으로 난 강력하게 자바 바이너리 직렬화를 사용에 대한 을 권하고 싶습니다 - 그 뒤로 앞으로 compatilility을 관리하기 정말 매우 까다로운 것으로 끝납니다. 다른 직렬화 프레임 워크를 사용할 수 있습니다. 일반적으로 Java 직렬화보다 시작하기 위해 더 많은 작업이 필요하지만 더 많은 이식 가능하고 유지 보수가 용이합니다. 개인적으로 나는 Protocol Buffers의 팬이지만 편향되어 있습니다.

+0

@ 루이스 와서 만 : 에헴, 물론,;). –

+0

감사합니다. 저는 serialVersionUid를 사용하면서 클래스에 30 개의 메소드를 추가하면 직렬화가 복잡하거나 시간이 많이 걸리지 않을 것입니다. – Snake

+0

@Snake : 저장된 데이터를 변경하지 않을 것입니다. –

관련 문제