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)
}