我正在尝试使用Groovy将 byte[] 转换为 Object 。我由字节数组表示的实际 Groovy 类实现了 Serializable 接口,并存储在单独的 Groovy 类文件中。ClassNotFoundException
然而,当我试图调用我的toObject
函数时,我总是得到这个类。我的代码是用 Java 编写的,在使用 Java 时有效,但在使用 Groovy 时无效。
private static byte[] toByteArray(Object obj) {
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
oos.close();
bos.close();
bytes = bos.toByteArray();
} catch (Exception ex) {
ex.printStackTrace();
}
return bytes;
}
private static Object toObject(byte[] bytes) {
Object obj = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
obj = ois.readObject();
} catch (Exception ex) {
ex.printStackTrace(); // ClassNotFoundException
}
return obj;
}
做这个的最好方式是什么?
编辑:将在发生 ClassNotFoundException 的上下文中使用的类是这样的:
public class MyItem implements Serializable {
/**
*
*/
private static final long serialVersionUID = -615551050422222952L;
public String text
MyItem() {
this.text = ""
}
}
然后测试整个事情:
void test() {
MyItem item1 = new MyItem ()
item1.text = "bla"
byte[] bytes = toByteArray(item1) // works
Object o = toObject(bytes) // ClassNotFoundException: MyItem
MyItem item2 = (MyItem) o
System.out.print(item.text + " <--> " + item2.text)
}