2011-08-25 3 views
4

이 코드 ...Groovy에서 자체 정의 오브젝트를 직렬화하는 방법

class A implements Serializable{ 
    String str 
    int n 
} 

try{ 
    def a= new A(str:'abc', n:7) 
    def out= new ObjectOutputStream(new FileOutputStream('serializedObject.obj')) 
    out.writeObject(a) 
    out.close() 
}finally{} 

try{ 
    def inp= new ObjectInputStream(new FileInputStream('serializedObject.obj')) 
    def a2= inp.readObject() 
    inp.close() 
}finally{} 

... 오류가 발생합니다 ...

java.lang.ClassNotFoundException: A 
    at java_io_ObjectInput$readObject.call(Unknown Source) 
    at otherRun.run(otherRun.groovy:16) 

... 두 번째 try 블록에서 개체를 다시로드하려고 시도 할 때. 클래스가 java.util.List와 같은 미리 정의 된 클래스 일 때도 정상적으로 작동합니다. 위의 코드는 line-for-line을 Java으로 변환 할 때도 정상적으로 작동합니다.

Groovy에서 어떻게 작동시킬 수 있습니까?

답변

4

"클래스 A"를 자체 파일에 넣고 "A.class"파일이 클래스 패스에서 사용 가능한지 확인하십시오.

+0

나는 그것을 시험하지 않고 작동 할 것이라고 생각했다. 사실 그것은 Groovy에서 직렬화를 사용하는 궁극적 인 목표이다. 그러나 여러 파일, 패키지, 성능 향상 등으로 형식을 지정하기 전에 Groovy에서 단일 소스 파일을 사용하여 새로운 Java/Groovy 기능을 실험하는 것이 매우 편리합니다. ** line-for-line으로 변환 할 때 코드가 정상적으로 작동하기 때문에 Java **에 추가하면, Groovy도 Java를 활성화해야합니다. –

+1

싱글 소스 파일이 있고 그것을 실행하면 "클래스 A"가 여러 번 컴파일 될 수 있습니다 ... 일반적으로 이름이 부 풀립니다. 이것은 또한 이상한 행동으로 이어질 수 있습니다. –

관련 문제