이 클래스가 직렬화 할 수없는 이유는 무엇입니까?
-
20-09-2019 - |
문제
Mersenne-Twister 구현을 사용하고있었습니다 http://www.math.sci.hiroshima-u.ac.ac.jp/~mat/mt/versions/java/mtrandom.java 기본값에 대한 드롭 인 교체로 java.util.Random
수업. 그러나 4 개의 필드 (int, 부울 및 2 바이트 [])는 다음과 같이 표시됩니다. transient
. 이것은 사용자 정의 기능을 구현하지 않고도이 클래스의 객체를 직렬화 할 수 없음을 의미합니다.
문제는이 필드가 일시적으로 표시되는 이유가 있습니까? 파일에서 객체를 읽을 때 아무런 의미가없는 정보를 보유하는 코드가 있습니까? 나는 그것을 제거했다 transient
필드에서 수정 자와 잘 작동하는 것처럼 보이지만 집중적으로 테스트하지 않았으므로 파손되는 경우도있을 수 있습니까?
개인적으로, 나는 수업에서 수행 된 모든 것이 산술이기 때문에 왜 그런지 알 수 없습니다.
해결책
아마도 그 이유는 아마도 가능성이 높습니다 모두 클래스의 비 정적 필드 중 transient
그렇습니다 MTRandom
클래스는 이진과 호환됩니다 java.util.Random
, 그것은 확장된다.
따라서 이론적으로, 당신은 an을 일련화 할 수 있습니다 MTRandom
인스턴스, 그리고 그것을 a로 삼아야합니다 Random
인스턴스와 모든 것이 작동합니다.
그 분야가 아닌 경우 transient
, 그들은 직렬화되어 양립 할 수 없게됩니다.
그러나 내가 알 수있는 한, 과도를 제거하면 문제가 발생하지 않아야합니다.
다른 팁
댓글에서 serialVersionUID
, 저자가 직렬화를 고려하고 싶지 않은 것 같습니다. 첨가 transient
일부 컴파일러/IDE 경고를 억제했을 수 있습니다.