我是Stack Overflow的新手。我已经创建了一个Groovy类加载器的对象,其中我已经加载了我的脚本所需的所有类。我有一个序列化和反序列化由类加载器中加载的类之一创建的对象的任务。问题是在反序列化时我无法将类中的对象转换为类加载器中的类。我不知道如何在类加载器中加载的类中转换对象。有人可以帮助我。 ?????在下面的代码片段中是一个在类加载器中加载的类,但我该如何实现呢。
Object o = null
new ByteArrayInputStream(bytes).withObjectInputStream(getClass().classLoader){ gin ->
o = (?????)gin.readObject() }
提前致谢!!!
答案 0 :(得分:0)
我设法解决了你的问题。让我告诉你一个有效的例子
我使用的一些Employee
类
public class Employee implements java.io.Serializable
{
public String name;
public String address;
}
然后是Main
类
class Main {
public static void main(String[] args) {
Employee e1 = new Employee()
e1.name = 'John'
e1.address = 'Main Street'
byte[] bytes = []
ByteArrayOutputStream stream = new ByteArrayOutputStream()
ObjectOutputStream out = new ObjectOutputStream(stream)
out.writeObject(e1)
bytes = stream.toByteArray()
out.close()
stream.close()
Object o = null
new ByteArrayInputStream(bytes).withObjectInputStream(Main.getClassLoader()){ gin ->
o = gin.readObject()
}
print o instanceof Employee
println 'Deserialized Employee...'
println 'Name: ' + o.name
println 'Address: ' + o.address
}
}
而不是getClass().classLoader
投掷java.lang.ClassNotFoundException
,我正在做Main.getClassLoader()
。这个类加载器能够找到我的Employee
类。
此外,您不需要强制转换对象,它是常规的,它是动态的,因此您可以在运行时获得name
和address
字段。
但是,你总是可以检查对象的类型,然后再投射它:
print o instanceof Employee
这将返回true