2014-12-23 9 views
0

kryo lib를 사용하여 객체를 직렬화합니다. 내가 오류 얻을 : (-> ArrayLisoSerialization ArrayListSerialization)Java에서 클래스 이름이 변경되면서 이상한 오류가 발생했습니다.

Unable to find class: java.util.ArrayLisoSerialization 

와 동료는 그 오류를 재현를 ... Kryo에서 해당 자바 클래스 이름이 변경되었습니다 보인다. 그것은 2 대의 컴퓨터 (리눅스와 윈도우, 둘 다 jdk7)에서 테스트되었고 내 컴퓨터 (리눅스)에서만 문제가 나타납니다. Java 버전을 jdk7 (빌드 67)에서 jdk8로 변경하려고 시도했지만 문제가 계속 발생합니다.

왜 그런가? 오류 추적의

큰 부분 :

com.esotericsoftware.kryo.KryoException: Unable to find class: java.util.ArrayLisoSerialization trace:messages at com.esotericsoftware.kryo.util.DefaultClassResolver.readName(DefaultClassResolver.java:138) at com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:115) at com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:666) at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:99) at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:528) at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:682)... 

답변

0

곳 kryo 또는 프로젝트의 구성 파일에 오타 것 같습니다. 먼저 프로젝트 파일에서 문자열 검색을 수행합니다. 두 번째 눈에

, 이것은 잘못된 것입니다 :

String className = input.readString(); 
.... 
type = Class.forName(className, false, kryo.getClassLoader()); 

문제는 그것을보고 데이터입니다. serialize 된 콘텐츠에 className으로 언급 한 잘못된 클래스가 포함되어 있습니다.

java.util.ArrayListSerialization이 원래 작성되었지만 어떻게 든 손상되었다고 가정하므로이 문제가 어떻게 작성되었는지 알 수 없습니다.

나는 Kryo에 너무 익숙하지 않다. 사람이 읽을 수있는 텍스트 파일로 작성 되었습니까? 그렇다면 손으로 파일을 읽는 동안 실수로 대체되었을 수 있습니다. (vi, 메모장 등). 볼 수 있듯이 입력 스트림은 단순히 읽혀지며 문자열이 열립니다.

데이터 파일을 열고 java.util.ArrayLisoSerialization 문자열이 있는지 확인합니다. 이것을 java.util.ArrayListSerialization으로 변경해야한다고 가정합니다.

매우 수정중인 데이터를 백업하십시오. 직렬화 된 데이터를 변경하면 항상 원래 데이터로 되돌릴 수있는 안전성을 유지해야합니다.

+1

내 프로젝트에서 오타를 찾으려고했지만 오류가 없습니다. Kryo는 오픈 소스 프로젝트이므로 오타 오류가 있는지 프로젝트를 확인해 보겠습니다. –

+1

@ElSzarry가 내 대답을 업데이트했습니다. 전체 스택 트레이스를 살펴보고 LisoSerialization이 입력 스트림에서 분명히 나옵니다. 따라서 디스크의 파일이나 데이터베이스의 BLOB 중 하나에 잘못된 값이 포함되어 있습니다. – Joeblade

+0

오류를 찾을 수 없습니다. 가상 박스에 Windows를 설치 한 후 오류가 나타나지 않습니다. 나는 무엇이 문제인지는 모르지만 그것이 내 리눅스 환경에 놓일 수 있다고 생각한다. 도와 줘서 고마워 Joeblade :) –