0

我正在尝试使用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)
    }
4

1 回答 1

1

我的猜测(这也是@JustinPiper 的建议)是您没有在引用它之前编译您的 groovy 类。您必须使用 groovyc 编译您的 groovy 类,并确保已编译的类文件位于类路径中(可能与 java 测试类位于同一文件中)。

于 2012-08-29T17:30:55.963 回答