열거 형을 포함하는 객체를 직렬화 해제하는 데 문제가 있습니다. 객체는 불만없이 직렬화되지만 객체를 직렬화 해제 할 때 InvalidObjectException이 발생합니다. 예외 메시지에 "No enum constant com.mypackagname"이 있습니다.j2objc - enum을 deserialize 할 때 예외
나는 SerializationTest.java의 testSerialization() 메소드를 기반으로 몇 가지 테스트 코드를 작성하여 문제를 격리하고 재현했다.
public class SerializationTest {
private static final String TEST_FILE_NAME = "serialization-test.bin";
public enum Gender { MALE, FEMALE }
public void testEnumSerialization() throws IOException, ClassNotFoundException {
Gender gender = Gender.MALE;
// Save the enum to a file.
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(TEST_FILE_NAME));
out.writeObject(gender);
out.close();
// Read back the enum.
ObjectInputStream in = new ObjectInputStream(new FileInputStream(TEST_FILE_NAME));
Gender gender2 = (Gender) in.readObject();
in.close();
}
}
내가 생성 된 목표 C 코드에서 열거 초기화에 문자열 값을 추가하면 직렬화가 잘 작동 것을 발견했다. 를 Obj C의 초기화 결과 방법은 다음과 같습니다 : 나는 @ "MALE"와 @있는 "여성"을 j2objc 출력의 기본입니다 @ ""추가
+ (void)initialize {
if (self == [SerializationTest_Gender class]) {
JreEnum(SerializationTest_Gender, MALE) = new_SerializationTest_Gender_initWithNSString_withInt_(@"MALE", 0);
JreEnum(SerializationTest_Gender, FEMALE) = new_SerializationTest_Gender_initWithNSString_withInt_(@"FEMALE", 1);
J2OBJC_SET_INITIALIZED(SerializationTest_Gender)
}
}
참고.
두 가지 질문이 있습니다. (1) 이것이 enum의 왕복 직렬화/직렬화 해제를 가능하게하는 올바른 방법입니까? (2) 그렇다면 j2objc가 열거 형의 문자열 상수를 손으로 코딩하는 대신 자동으로 채울 수있는 방법이 있습니까?
도움을 주셔서 감사합니다.
설명해 주셔서 감사합니다. 대안으로 프로토콜 버퍼를 살펴보고 수정 사항을주의 깊게 살펴 보겠습니다. – mkeller