2011-08-25 23 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) 

...试图重新加载对象的时第二次尝试块。当类是预定义的类(如java.util.List)时,它可以正常工作。上述代码的也可以在将行换行转换为Java时正常工作。

如何在Groovy中使用它?

回答

4

将您的“类A”放入其自己的文件中,并确保“A.class”文件在读取对象的位置(在类路径中)可用。

+0

我猜想,如果不尝试一下就可以工作,事实上,这是我在Groovy中使用序列化的最终目标。然而,使用Groovy中的单个源文件来实验新的Java/Groovy特性是非常方便的,然后使用多个文件,包,性能增强等对其进行正式化。因为**在线转换为线时代码工作正常到Java **中,也许Groovy也应该启用它。 –

+1

如果你有一个singel源文件并执行它,那么“class A”可能会被编译好几次......通常会得到一个wiered的名字。这也可能导致奇怪的行为。 –

相关问题