我正在嘗試使用Groovy將字節[]轉換爲對象。我用字節數組表示的實際Groovy類實現了Serializable接口,並存儲在一個單獨的Groovy類文件中。然而,當我嘗試打電話給我的toObject
函數時,我總是得到這個類的ClassNotFoundException
。我的代碼是用Java編寫的,在使用Java時可用,但在使用Groovy時不可用。如何在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)
}
只是爲了澄清,當你說它存儲在一個單獨的Groovy類文件中時,你的意思是一個由groovyc編譯的實際.class文件,還是一個單獨的.groovy文件?你的例子是爲我寫的,但是隻有在我編譯定義Serializable類的源文件的時候。 –
這對我來說有點困惑。 ClassNotFoundException的目標是什麼類?這個班是編譯的嗎?它在類路徑上嗎? –
@JustinPiper在單獨的.groovy文件中 – IHeartAndroid